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()方法,而复制的对象可以在其方法体内进行调整

单独讲

 

posted @ 2016-12-26 10:23  党兴明  阅读(235)  评论(0编辑  收藏  举报