type将类提示为具有不同命名空间的另一个类的参数

时间:2016-02-11 14:24:58

标签: php namespaces type-hinting

我对类型提示和命名空间没有太多直观的了解。所以我编写了以下代码来处理这两个概念。我有三个php页面,其中包含三个类和一个index.php文件在同一个目录中。它们是 -

  

1.Student.php

     

2.Institution.php

     

3.enroll.php。

     

4.index.php

我想同时使用Student and Institution类中的enroll类。我在namespacesStudent and Institution类中应用了enroll。{{1}他们在里面注册课。但是这里的事情不太正确。我收到了这些错误: “它说我应该通过enroll \ student而不是student \ student”

  

可捕获的致命错误:参数1传递给   enroll \ enroll :: __ construct()必须是enroll \ student的实例,   学生\学生的实例,被称为   C:\ xampp \ htdocs \ practice \ typehint \ index.php在第9行并在中定义   第5行的C:\ xampp \ htdocs \ practice \ typehint \ enroll.php

任何人都可以解释这里有什么问题以及如何解决这个问题?

student.php

use

institute.php

namespace Student;
 class Student{

     public $name;

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

 }

enroll.php

namespace Institute;
   class Institute{

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

的index.php:

   namespace enroll;
      class enroll{

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

1 个答案:

答案 0 :(得分:0)

enroll类中的构造函数将Student和Institute类类型化为属于enroll命名空间,这就是出错的原因。要从Student和Institute命名空间中键入类,只需使用它们:

enroll.php

namespace enroll;

use Student\Student;
use Institute\Institute;

class enroll{

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

没有必要加载文件,因为在index.php中最后加载了enroll.php文件