我对类型提示和命名空间没有太多直观的了解。所以我编写了以下代码来处理这两个概念。我有三个php页面,其中包含三个类和一个index.php文件在同一个目录中。它们是 -
1.Student.php
2.Institution.php
3.enroll.php。
4.index.php
我想同时使用Student and Institution
类中的enroll
类。我在namespaces
和Student 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 .';
}
}
答案 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文件