我有这段代码:
<?PHP
function call_and_set( $obj, $txt){
return call_user_method('example', $obj, $txt);
}
class test{
function example($text){
echo $text;
}
}
$test = new test();
call_and_set($test, "Hello World!");
?>
在我的代码中,我并不总是想使用
$ test = new test ....
我想直接使用该名称而不是$test
。例如:
call_and_set("test", "Hellow World!").
答案 0 :(得分:1)
我想我明白你想要完成什么,但有点不清楚。您可以将要实例化的类的名称指定为变量名称:
<?php
class test {}
$test = 'test';
$testObj = new $test;
在尝试实例化之前验证类是否存在可能是个好主意,但是:
if(class_exists($test)) {
$testObj = new $test;
}
答案 1 :(得分:1)
我不知道为什么他们会投票给你。我认为这个问题并不是那么糟糕。
您应该使用工厂方法模式或类似的东西。使用工厂方法,您可以基于字符串创建类。在PHP中,它并不难。尝试这样的事情:
<?PHP
function call_and_set( $className, $txt) {
$obj = ProductFactory::create($className);
return call_user_method('example', $obj, $txt);
}
class test
{
function example($text){
echo $text;
}
}
class ProductFactory
{
public static function create($className) {
//Add some checks and/or include class files
return new $className();
}
}
call_and_set("test", "Hello World!");
?>