问题描述
|
现在,我正在使用yii框架,我想编写如下内容:
protected static $model = \"Customer\";
...
public function actionIndex() {
$model::model()->find(...
现在可以正常工作:
protected static $model = \"Customer\";
protected static $model_obj;
...
public function __construct($controller,$id) {
$this->model_obj = new self::$model;
...
public function actionIndex() {
$model_obj::model()->find(...
但是为访问静态成员创建对象是一件坏事。
如何避免呢?
getClass将对象作为第一个参数,因此不适合此目的
谷歌说:
$a = constant($myClassName . \"::CONSTANT\");
$b = call_user_func(array($myClassName,\"static_method\"));
看起来像是可怕的狗屎和平。使用它可能会带来很多麻烦。另一个解决方案?
哦!我的问题是另一个:
$controller::$NAME::model() // error
$controller_name = $controller::$NAME
$controller_name::model() // good
谢谢
解决方法
class foo
{
public static function bar()
{
return 42;
}
}
// class name as string
$class = \'foo\';
var_dump($class::bar()); // 42
// method name as string
$method = \'bar\';
var_dump(foo::$method()); // 42
// class AND method names as strings
var_dump($class::$method()); // 42
, call_user_func(array($myClassName,\"static_method\"));
是做到这一点的主要方法。我不太确定为什么会引起任何问题。