PHP:函数参数必须与动态类名称的对象
问题描述:
所以我在面向对象编程的世界新和我目前面临这个问题(一切都在规范中描述):PHP:函数参数必须与动态类名称的对象
<?php
class MyClass {
// Nothing important here
}
class MyAnotherClass {
protected $className;
public function __construct($className){
$this->className = $className;
}
public function problematicFunction({$this->className} $object){
// So, here I obligatorily want an $object of
// dynamic type/class "$this->className"
// but it don't works like this...
}
}
$object = new MyClass;
$another_object = new MyAnotherClass('MyClass');
$another_object->problematicFunction($object);
?>
灿任何人都帮助我?
感谢,马克西姆(法国:对不起,我的英语)
答
你需要的是
public function problematicFunction($object) {
if ($object instanceof $this->className) {
// Do your stuff
} else {
throw new InvalidArgumentException("YOur error Message");
}
}
答
尝试这样
class MyClass {
// Nothing important here
public function test(){
echo 'Test MyClass';
}
}
class MyAnotherClass {
protected $className;
public function __construct($className){
$this->className = $className;
}
public function problematicFunction($object){
if($object instanceof $this->className)
{
$object->test();
}
}
}
$object = new MyClass;
$another_object = new MyAnotherClass('MyClass');
$another_object->problematicFunction($object);
答
这就是所谓的type hinting,你想要做什么只是不支持。
如果所有这些动态类名都有一些共同点(例如,它们对于某些功能而言是不同的实现),您可能需要定义一个基类(也许是抽象类)或一个接口并将该共同祖先用作类型提示:
<?php
interface iDatabase{
public function __contruct($url, $username, $password);
public function execute($sql, $params);
public function close();
}
class MyClass implements iDatabase{
public function __contruct($url, $username, $password){
}
public function execute($sql, $params){
}
public function close(){
}
}
class MyAnotherClass {
protected $className;
public function __construct($className){
$this->className = $className;
}
public function problematicFunction(iDatabase $object){
}
}
否则,刚刚转会支票problematicFunction()
身体内,其他的答案解释。
你不能使用{$ this-> className},在有问题的函数中用instanceof检查$ object – sanj 2013-02-25 10:55:22
你想用这个来实现什么?自动加载磁带机? – 2013-02-25 10:57:00