我試圖找到一個解決方案,以防止靜態變量被複制到擴展類(這不能很好地與晚靜態綁定),這是我認爲可能工作,但給我一個「PHP致命錯誤:在寫入方面」不能使用函數返回值:從__callStatic返回對靜態變量的引用?
<?php
class Person
{
protected static $tlsb_names = ['name'];
protected static $tlsb_vars = [];
public static function & __callStatic($method,$args)
{
echo "call static " . $method . " on " . get_called_class() . "\n";
if(in_array($method,static::$tlsb_names))
{
if(!array_key_exists(get_called_class(),static::$tlsb_vars))
{
static::$tlsb_vars[get_called_class()] = [];
}
if(!array_key_exists($method, static::$tlsb_vars[get_called_class()]))
{
echo "set var $method for " . get_called_class() . "\n";
static::$tlsb_vars[get_called_class()] = null;
}
return static::$tlsb_vars[get_called_class()][$method];
}
}
public static function show_name()
{
static::name() . "\n";
}
public static function call_me_al()
{
static::name() = "Al";
}
public static function call_me_joe()
{
static::name() = "Joe";
}
}
class Al extends Person{}
class Joe extends Person{}
Al::call_me_al();
Joe::call_me_joe();
Al::show_name();
Joe::show_name();
有問題的部分是用線:
public static function call_me_al()
{
static::name() = "Al";
}
顯然,這是因爲我的迴音的非編譯時錯誤的運行。
我在這裏做錯了什麼?
'= [];'在PHP afaik中無效? – Wrikken
是的,從PHP 5.4開始我覺得這不是很好嗎? :) – djfm
我有一件事要說的:_「Whooohoooo!升級時間!」_ ...如果你使它2語句('$ name = self :: name(); $ name =' Al':'?) – Wrikken