2012-09-27 33 views
0

我需要在靜態PHP類中實現方括號(數組運算符)。PHP靜態類Array []運算符?

的主要目標是讓調用類這樣的結尾:

MyStaticClass[ $something ] = $somethingElse ; 
$SomeVar = MyStaticClass[ $something ] ; 

我知道這是一個異端,但我真的需要它...

任何想法?

我想知道是否可以靜態調用這樣的操作符,因爲我在網上找不到任何東西。

感謝您的幫助:)

+0

'[]'運算符不能在PHP中重載,但是可以使用圓括號和['__call()'](http://php.net/manual/en/language.oop5.overloading.php# object.call)。 – Bojangles

+0

好的,但是如何擴展Array? - > http://stackoverflow.com/questions/787692/operator-overloading-in-php – Benj

回答

1

[]不能被重載唯一的變量和方法

樣例類

class MyStaticClass 
{ 
    static public $somthing = array("somthingElse"=>"Hello Benj") ; 
} 

直接調用它

var_dump(MyStaticClass::$somthing["somthingElse"]); 

您還可以使用

$MyStaticClass = MyStaticClass::$somthing ; 
var_dump($MyStaticClass["somthingElse"]); 

他們都將輸出

string 'Hello Benj' (length=10) 

在PHP 5.4

function MyStaticClass() 
{ 
    return MyStaticClass::$somthing ; 
} 

var_dump(MyStaticClass()["somthingElse"]); 
+1

OW YOU!我爲什麼沒有想到這個?非常感謝 ! – Benj

+0

@Benj歡迎您.....我可以問你爲什麼不接受 – Baba

+0

對不起,完成:) – Benj

1

我不認爲你需要超載的運營商。

如果我理解你的問題,你想能夠訪問和修改MyStaticClass中的字段?

那麼做到這一點:

MyStaticClass::$something = $somethingElse ; 
$SomeVar = MyStaticClass::$something ; 

只要確保你的靜態屬性被設置爲公共類定義。

PHP真的不支持操作符重載等C++的作用:

http://www.php.net/manual/en/language.oop5.overloading.php

Is it possible to overload operators in PHP?

+0

我想訪問一個數組,而不是一個字段(我知道stdClass屬性實際上是一個數組)。爸爸的回答完美地滿足了我,因爲我可以從ArrayObject接口派生內部靜態屬性,並使其執行額外的操作。感謝您的發佈。 – Benj