好的我有一个字符串......
$a_string = "Product";
我想在调用这样的对象时使用这个字符串:
$this->$a_string->some_function();
狄更斯如何动态调用该对象?
(不要以为我在PHP 5上的心态)
答案 0 :(得分:3)
所以你要使用的代码是:
$a_string = "Product";
$this->$a_string->some_function();
这段代码暗示了一些事情。一个名为Product
的类,其方法为some_function()
。 $this
具有特殊含义,并且仅在内部类定义中有效。所以另一个类将有一个Product
类的成员。
因此,为了使您的代码合法,这是代码。
class Product {
public function some_function() {
print "I just printed Product->some_function()!";
}
}
class AnotherClass {
public $Product;
function __construct() {
$this->Product = new Product();
}
public function callSomeCode() {
// Here's your code!
$a_string = "Product";
$this->$a_string->some_function();
}
}
然后你可以用它来调用它:
$MyInstanceOfAnotherClass = new AnotherClass();
$MyInstanceOfAnotherClass->callSomeCode();
答案 1 :(得分:1)
我似乎以不同于其他所有回复的人的方式阅读此问题,但您是否尝试使用variable variables?
答案 2 :(得分:0)
编辑:您需要运行PHP5才能进行任何方法链接。在那之后,你拥有的是完全合法的。
答案 3 :(得分:0)
在您显示的代码中,看起来您正在尝试从字符串本身调用函数。我的猜测是你要从一个与该字符串同名的类中调用一个函数,在本例中为“Product”。
这就是这样:
$this->Product->some_function();
看起来你可能正在寻找这样的东西:
$Product = new Product();
$Product->some_function();
答案 4 :(得分:0)
让我们看看我的意图是否正确......
$some_obj=$this->$a_string;
$some_obj->some_function();
答案 5 :(得分:0)
所以你有一个对象,其中一个属性(称为“Product”)是另一个具有some_function()方法的对象。
这对我有用(在PHP5.3中):
<?PHP
class Foo {
var $bar;
}
class Bar {
function some_func(){
echo "hello!\n";
}
}
$f = new Foo();
$f->bar = new Bar();
$str = 'bar';
$f->$str->some_func(); //echos "hello!"
我没有PHP4,但是如果它不起作用,你可能需要使用call_user_func()(或者如果需要将参数传递给some_function()
,则需要使用call_user_func_array()