Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态构造这个php调用_Php_Oop - Fatal编程技术网

动态构造这个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;
  }
确保查询类型对象实现相同的接口。否则可能会出现错误