1,魔术常量,有很多,总结之
A 识别脚本运行时的位置或名称等
_LINE_ 返回当前行号
_FILE_ 返回当前脚本的完整路径和文件名,包含一绝对路径
_FUNCTION_ 返回该函数被定义时的名字(大小写敏感)
_CLASS_ 类名称,返回该类别定义时的名字(大小写敏感)
_METHOD_ 类的成员方法名称(大小写敏感)
class MagicTest {
//返回当前函数的名称
function test_function() {
return __FUNCTION__;
}
//返回当前类的名字
function test_class() {
return __CLASS__;
}
//返回当前方法的名字
function test_method() {
return __METHOD__;
}
}
echo "_LINE_运行时的所在行号: ".__LINE__."
";
echo "当前PHP脚本的完整路径: ".__FILE__."
";
echo "当前执行的类名: ".MagicTest::test_class()."
";
echo "当前执行的函数名: ".MagicTest::test_function()."
";
echo "当前类的方法名: ".MagicTest::test_method()."
";
?>
还有OOP里的魔术
_get()与_set(),_call(),当试图写入一个不存在或不可见的属性时,会执行_set()方法,如
class myShop {
private $p = array();
function __set($name, $value) { //取得属性名称和值
echo "set::$name:$value
";
$this->p[$name] = $value;
}
function __get($name) { //取得属性名称
print "get::$name
";
return array_key_exists($name,$this->p) ? $this->p[$name] : null;
}
}
$shop = new MyShop();
$shop->apple = 2;
$shop->pear = 3;
$shop->pear++;
echo "苹果=". $shop->apple. "
";
echo "梨=". $shop->pear. "
";
?>
2 PHP里的CLONE()
class MyClass {
public $var = 1;
}
$obj1 = new MyClass();
$obj2 = $obj1;
$obj2->var = 2;
print $obj1->var;
?>
PHP4中上面的输出1,$obj2将值全部赋给$obj1,是建立对象的副本;但PHP5中,$obj1被当一个对象引用处理,当$obj2的值改变时,实际上修改的
是$obj的引用,所以输出2。
还有注意的是==比较两个对象的内容,===比较对象的句丙,即引用的 地址