понимание подсказок типа и пространства имен в php

у меня мало интуитивных знаний о подсказках типов и пространствах имен. Поэтому я составил следующий код для работы с обеими концепциями. У меня есть три php-страницы, содержащие три класса в одном каталоге. Они--

1.Студент.php

2.Учреждение.php

3.enroll.php.

Я хочу использовать оба класса Student and Institution внутри класса enroll. Я применил namespaces в обоих классах Student and Institution. И use их внутри класса enroll. Но что-то здесь не так. Я получаю следующие ошибки:

Предупреждение. Оператор use с несоставным именем «Студент» не действует в C:\xampp\htdocs\practice\typehint\enroll.php в строке 2.

Предупреждение: оператор использования с несоставным именем «Институт» не действует в C:\xampp\htdocs\practice\typehint\enroll.php в строке 3.

Неустранимая ошибка: класс «Студент» не найден в C:\xampp\htdocs\practice\typehint\enroll.php в строке 10

кто-нибудь может объяснить, что здесь не так и как это исправить?

student.php

namespace Student;
 class Student{

     public $name;

     publci function __construct($value){
        $this->name=$value;
     }

 }

institute.php

namespace Institute;
   class Institute{

      public $institute;
      public function __construct($val){
         $this->institute=$val;
      }
   }

enroll.php

use Student;
use Institute;
  class enroll{

      public function __construct(Student $student,Institute $institute){
         echo $student->name.' enrolled in '.$institute->institute.' school .';
      }
  }
  $student=new Student('zami');
  $institute=new Institute('Government Laboratory High School');

  $enroll=new enroll($student,$institute);

person AL-zami    schedule 11.02.2016    source источник


Ответы (1)


Вам все равно придется include сначала include другие файлы. в противном случае PHP не знает, где искать пространства имен, которые вы ищете.

enroll.php:

<?php
include "student.php";
include "institute.php";
use Student;
use Institute;
  class enroll{

      public function __construct(Student $student,Institute $institute){
         echo $student->name.' enrolled in '.$institute->institute.' school .';
      }
  }
  $student=new Student('zami');
  $institute=new Institute('GLAB');

  $enroll=new enroll($student,$institute);
person Franz Gleichmann    schedule 11.02.2016
comment
если я включу их, то какой смысл использовать пространство имен? можешь уточнить - person AL-zami; 11.02.2016
comment
include: объединение физических файлов в один логический сценарий. пространство имен: логическое разделение и сортировка. я действительно не знаю, как написать в коротком комментарии, для чего (и как) используются пространства имен, и я также не знаю, как написать, сколько способов пространства имен и включения не имеют в основном ничего общего. дело в том, что вам все равно придется включать файл, иначе PHP не сможет обработать то, что находится В файле. - person Franz Gleichmann; 11.02.2016
comment
Пространства имен — это не файлы, они в основном используются для организации классов. Дополнительная информация: php.net/manual/en/language.namespaces.rationale.php - person Marco Bax; 11.02.2016
comment
Вы можете автоматически загружать все классы: php.net/manual/en/language.oop5. автозагрузка.php - person Daan; 11.02.2016