【问题标题】:PHP catch calls to static parameter [duplicate]PHP捕获对静态参数的调用[重复]
【发布时间】:2012-12-21 08:19:37
【问题描述】:

可能重复:
Magic __get getter for static properties in PHP

是否可以像这样捕获对静态参数的调用:

class foo
{
    public static $foo = 1;
    //public static $bar = 2; 

    public function catch_bar_call()
    {
        print "Calling an undefined property";
    }
}


print foo::$foo //1
print foo::$bar //error

我想要调用一个方法,而不是出现错误。 我知道它可能通过 __get() 魔术方法进行,但是您必须为此实例化您的类,这在静态参数上是不可能的。

【问题讨论】:

  • 我看到了,也许有人知道解决方案...

标签: php parameters static call


【解决方案1】:

From PHP DOC

$name 参数是与之交互的属性的名称。 __set() 方法的 $value 参数指定 $name'ed 属性应设置的值。

属性重载仅适用于对象上下文。 这些魔法方法不会在静态上下文中触发。因此这些方法不应该被声明为静态的。从 PHP 5.3.0 开始,如果其中一种神奇的重载方法被声明为静态,则会发出警告。

我认为你可以做的是

class Test {
    private static $foo = 1;
    // public static $bar = 2;
    public static function foo() {
        return self::$foo;
    }

    public static  function __callStatic($n,$arg) {
         print "\nCalling an undefined property $n";
    }
}
echo "<pre>";
print Test::foo(); // 1
print Test::bar(); // Calling an undefined property bar

输出

1
Calling an undefined property bar

【讨论】:

  • 在调用静态函数时处理问题,但不调用静态参数/属性。尝试 Test::$bar (它没有设置并引发错误。我想要设置一种侦听器来捕获对属性/参数的所有调用,并在属性不持久时做出反应)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2014-07-18
  • 2014-03-09
相关资源
最近更新 更多