我现在已经挣扎了一段时间,因为谷歌在这个问题上有tons of results我想知道我做错了什么,因为没有一个解决方案对我有用。
我有两个班级File
和Image
。我让File
类决定输入是图像还是其他类型的文件。当文件是图像时,我想将该文件传递给Image
类来处理它。
到目前为止我有这个
Class File{
public $file;
function __construct($input){
$this->file = $input;
}
public function getFileType(){
// determine filetype of $this->file
return 'image';
}
}
Class Image Extends File{
function __construct(){}
public function test(){
return $this->file;
}
}
$file = new File('file.jpg');
if($file->getFileType() == 'image'){
$image = new Image;
echo $image->test();
}
但这不输出任何东西。如何在继承的类中访问父类的构造函数参数的值?在子构造函数类中调用parent::__construct();
(作为mentioned here)会给我一个缺少参数的警告,this one(子构造函数中的call_user_func_array(array($this, 'parent::__construct'), $args);
)也不起作用。
我缺少什么?
答案 0 :(得分:2)
首先,您需要了解代码中的$image
和$file
是 2个不同的对象。
$image
对$file
一无所知,反之亦然。
使用您的代码设计,解决方案可以是:
Class File {
public $file;
function __construct($input){
$this->file = $input;
}
public function getFileType(){
// determine filetype of $this->file
return 'image';
}
}
Class Image Extends File{
function __construct($input)
{
parent::__construct($input);
// after that you have `$this->file` set
}
public function test(){
return $this->file;
}
}
$file = new Image('file.jpg');
if ($file->getFileType() == 'image'){
echo $file->test();
}
但这种做法很混乱。您创建类Image
的对象,并在创建后确保它是真正的图像。我想你需要使用类似fabric
模式的东西,并在File
类中生成适当类型的对象。