【问题标题】:How to call static method using class property?如何使用类属性调用静态方法?
【发布时间】:2014-02-12 12:02:56
【问题描述】:

类 A 中有一个属性 $modelName,可以在此类中使用 $this->modelName 访问。

此属性包含另一个 B 类的名称。

我想调用 B 类的静态方法而不是创建 B 的对象。

工作代码:

$b = $this->modelName;
$b::model()->findAll();

问题: 如何不使用 $b 调用 model()->findAll()?

我尝试了$this->modelName::model()->findAll();,但它不起作用。

【问题讨论】:

    标签: php class variables properties static-methods


    【解决方案1】:

    这样做:

     class A{
       public $modelName = 'B';
    
       function callB(){
         call_user_func(array($this->modelName, 'model'))->findAll();
       }
     }
    
     class B{
       private  static $model = null;
    
       static function model(){
    
         if (!self::$model) {
            self::$model = new B();
         }
         return self::$model;
      }
    
       function findAll(){
          print  __CLASS__.' method `findAll()`';
       }
     }
    
    $A = new A;
    $A->callB();
    
    // B method `findAll()`
    

    【讨论】:

    • call_user_func(array($this->modelName, 'model'))->findAll(); — 是最可接受的变体。但是有什么方法可以不使用 call_user_func() 来调用 model() 吗?
    • @tr_ 思考,在 PHP 中,它只有一种方法可以满足您的需求 - $this->modelName::model()->findAll(); 就像我展示的那样
    • @tr_ 也可以使用call_user_func_array 来调用参数数组
    • 好的,感谢您的快速回复。如果没有其他方法,我将使用您的答案。
    猜你喜欢
    • 2017-04-12
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多