OOP的四个魔术方法
1 __autoload()自动包含类文件
通常会把类的定义单独写到一个文件里,要在另外的文件调用时需要引用require,但类的定义文件会很多就会造成一下问题
//1 如果包含多个类文件,需要一一引入 //2 引入多个类,如果用不到会浪费 //3 引入类文件可能会遗漏,比如:创建了一个对象,而这个对象的类文件没有引入,就会产生错误
所以用__autoload()动态引入类文件,当一个对象被实例化时,就会自动调用__autoload()函数,将类名作为字符串参数传递给它,所以可以这么做:
Computer.class.php是一个定义了电脑类的文件
function __autoload($_className){ // echo $_className; //输出类名 require strtolower($_className).'.class.php'; } $com = new Computer(); $com->_run();
2 当对象调用一个不存在的方法时,会自动调用__call()方法,来屏蔽对象调用方法时产生的错误。
<?php class Computer{ public function _run(){ echo '运行'; } //采用__call()来屏蔽错误 private function __call($_methodName,$_argList){ echo $_methodName.'()方法不存在'; //会输出_go()不存在 print_r($_argList); //输出数组array() } } $com = new Computer(); $com->_go(); //调用不存在的方法时会屏蔽错误 ?>
3 __tostring() 当直接打印对象时(echo 对象名;),会报错,__tostring()方法可以在打印对象时自动调用,从而不会产生错误
<?php class Computer{ public function _run(){ return '运行中'; } private function __toString(){ return '直接打印对象'; } } $comp = new Computer(); echo $comp; //直接打印对象 ?>
4 __clone()PHP可以在类中定义一个__clone()内置方法来调整对象的克隆行为。当一个对象被克隆的时候自动执行__clone()方法,而复制的对象可以在其方法体内进行调整
单独讲
本博客作为一个入门者的自学记录,欢迎各位同行者不吝赐教。