2012-09-27 113 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