【问题标题】:how to change static method in php outside class如何在类外更改php中的静态方法
【发布时间】:2015-02-13 14:30:17
【问题描述】:

我们可以从外部改变一个类的静态变量值,这就是静态变量的优点,但是我们如何从外部改变静态方法呢?

<?php

class A
{
   static $static_var = 0;   

   static function test(){
      return 'i want to change inside this test method';
   }
}
echo A::$static_var; // outputs 0

++A::$static_var;

echo A::$static_var; // ouputs 1

// Now how do we do something to change the static test method body? is it possible ?
like

A::test() = function(){ /* this is wrong */} 

}

【问题讨论】:

  • 你为什么要这个?
  • 能够从类外部更改变量与静态无关,而是公开
  • 至于能够更改变量.....这就是 variable 的全部意义......但函数不是变量,并且应该没有理由动态更改函数定义
  • 如果您需要“动态”方法,请改用closures
  • @MarkBaker 我认为我们无法从外部更改类的公共变量值。只有静态变量可以更改,并且类将继续在该特定代码行中保存更改后的静态值。如果我错了,请纠正我。

标签: php oop static-methods


【解决方案1】:

正如@Mark Ba​​ker 所说,您只能更改变量... 但是有一种方法可以将变量声明为可调用的,您可以使用匿名函数。

这里是文档:http://php.net/manual/en/functions.anonymous.php

class A
{
   public static $method;
}

A::$method = function() { 
    echo 'A'; 
};

call_user_func(A::$method);
// OR
$method = A::$method;
$method();

【讨论】:

  • 在这里您将一个函数分配给一个变量并调用该变量函数,我很想知道我们是否可以从类外部更改已声明的静态方法的主体。如果可以更改静态变量值,为什么不更改方法体?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2014-05-06
相关资源
最近更新 更多