动态构造这个php调用
我正在尝试动态构造这样的调用。唯一改变的部分是动态构造这个php调用,php,oop,Php,Oop,我正在尝试动态构造这样的调用。唯一改变的部分是Some SomeQuery::create->findPk($id); 所以可能是这样 WhatQuery::create->findPk($id); OtherQuery::create->findPk($id); 我试过这个,但不确定为什么不起作用 $dynamic = "Some"; $tablename = $dynamic."Query::create()"; $$tablename->findPk($id);
Some
SomeQuery::create->findPk($id);
所以可能是这样
WhatQuery::create->findPk($id);
OtherQuery::create->findPk($id);
我试过这个,但不确定为什么不起作用
$dynamic = "Some";
$tablename = $dynamic."Query::create()";
$$tablename->findPk($id);
如果您使用的是PHP>=5.3,则可以使用以下内容:
$className = 'SomeQuery'; // or another one
$className::create()->findPk($id);
作为参考,请参阅本手册的本页:
但这对于PHP<5.3是无效的
在PHP5.2中,您必须回退到基于--或其家族的另一个函数的解决方案 我想像这样的事情应该会起作用:
$className = 'SomeQuery'; // or another one
$created = call_user_func(array($className, 'create'));
$created->findPk($id);
如果您使用的是PHP>=5.3,则可以使用以下内容:
$className = 'SomeQuery'; // or another one
$className::create()->findPk($id);
作为参考,请参阅本手册的本页:
但这对于PHP<5.3是无效的
在PHP5.2中,您必须回退到基于--或其家族的另一个函数的解决方案 我想像这样的事情应该会起作用:
$className = 'SomeQuery'; // or another one
$created = call_user_func(array($className, 'create'));
$created->findPk($id);
如果您有>=PHP5.3
$class = 'Some' . 'Query';
$query = $class::create();
$query->findPk($id);
如果您有>=PHP5.3
$class = 'Some' . 'Query';
$query = $class::create();
$query->findPk($id);
尝试:
$tablename = $dynamic."Query::create";
如果不起作用,请与数组($dynamic.Query”,“create”)
一起使用
祝你好运 试试:
$tablename = $dynamic."Query::create";
如果不起作用,请与数组($dynamic.Query”,“create”)
一起使用
祝你好运 要使用的工厂模式:
class QueryCreator {
public static function create($queryTypeName) {
if(class_exists($queryTypeName)) {
return $queryTypeName::create();// to use your model.
// I'd use return new $queryTypeName();
}else {
throw Exception("class ".$queryTypeName." does not exist");
}
}
}
用法:
try {
$query = QueryCreator::create("myQuery");
$query->findPK($id);
} catch (Exception $e) {
// whatever// throw it forward or whatever you want to do with it;
}
确保查询类型对象实现相同的接口。否则可能会出现错误。要使用的工厂模式:
class QueryCreator {
public static function create($queryTypeName) {
if(class_exists($queryTypeName)) {
return $queryTypeName::create();// to use your model.
// I'd use return new $queryTypeName();
}else {
throw Exception("class ".$queryTypeName." does not exist");
}
}
}
用法:
try {
$query = QueryCreator::create("myQuery");
$query->findPK($id);
} catch (Exception $e) {
// whatever// throw it forward or whatever you want to do with it;
}
确保查询类型对象实现相同的接口。否则可能会出现错误