21,886
社区成员
发帖
与我相关
我的任务
分享
<?php
class cA
{
/**
* Test property for using direct default value
*/
protected static $item = 'Foo';
/**
* Test property for using indirect default value
*/
protected static $other = 'cA';
public static function method()
{
print self::$item."\r\n"; // It prints 'Foo' on everyway... :(
print self::$other."\r\n"; // We just think that, this one prints 'cA' only, but... :)
}
public static function setOther($val)
{
self::$other = $val; // Set a value in this scope.
}
}
class cB extends cA
{
/**
* Test property with redefined default value
*/
protected static $item = 'Bar';
public static function setOther($val)
{
self::$other = $val;
}
}
class cC extends cA
{
/**
* Test property with redefined default value
*/
protected static $item = 'Tango';
public static function method()
{
print self::$item."\r\n"; // It prints 'Foo' on everyway... :(
print self::$other."\r\n"; // We just think that, this one prints 'cA' only, but... :)
}
/**
* Now we drop redeclaring the setOther() method, use cA with 'self::' just for fun.
*/
}
class cD extends cA
{
/**
* Test property with redefined default value
*/
protected static $item = 'Foxtrot';
/**
* Now we drop redeclaring all methods to complete this issue.
*/
}
cB::setOther('cB'); // It's cB::method()!
cB::method(); // It's cA::method()!
cC::setOther('cC'); // It's cA::method()!
cC::method(); // It's cC::method()!
cD::setOther('cD'); // It's cA::method()!
cD::method(); // It's cA::method()!
/**
* Results: ->
* Foo
* cB
* Tango
* cC
* Foo
* cD
*
* What the hell?! :)
*/
?>
class cA
{
/**
* Test property for using direct default value
* 使用直接默认值测试属性
*/
protected static $item = 'Foo';
/**
* Test property for using indirect default value
* 使用间接默认值测试属性
*/
protected static $other = 'cA';
public static function method()
{
print __METHOD__ . ' ' . __CLASS__ . '::$item=' . self::$item."\r\n";
print __METHOD__ . ' ' . __CLASS__ . '::$otfer=' . self::$other."\r\n";
}
public static function setOther($val)
{
self::$other = $val; // Set a value in this scope.
}
}
class cB extends cA
{
/**
* Test property with redefined default value
* 重新定义了默认值测试属性
*/
protected static $item = 'Bar';
public static function setOther($val)
{
self::$other = $val;
}
}
class cC extends cA
{
/**
* Test property with redefined default value
* 重新定义了默认值测试属性
*/
protected static $item = 'Tango';
public static function method()
{
print __METHOD__ . ' ' . __CLASS__ . '::$item=' . self::$item."\r\n";
print __METHOD__ . ' ' . __CLASS__ . '::$otfer=' . self::$other."\r\n";
}
/**
* Now we drop redeclaring the setOther() method, use cA with 'self::' just for fun.
*/
}
class cD extends cA
{
/**
* Test property with redefined default value
* 重新定义了默认值测试属性
*/
protected static $item = 'Foxtrot';
/**
* Now we drop redeclaring all methods to complete this issue.
* 现在,我们放弃重新声明的所有方法来完成这个问题
*/
}
cB::setOther('cB'); // It's cB::method()!
cB::method(); // It's cA::method()!
cC::setOther('cC'); // It's cA::method()!
cC::method(); // It's cC::method()!
cD::setOther('cD'); // It's cA::method()!
cD::method(); // It's cA::method()!
cA::method cA::$item=Foo