zoukankan      html  css  js  c++  java
  • 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()方法,而复制的对象可以在其方法体内进行调整

    单独讲

  • 相关阅读:
    English in 999
    面向对象程序设计
    HOOK相关
    很幽默的讲解六种Socket IO模型(转)(Delphi版本)[转]
    P2P之UDP穿透NAT原理并有UDP打洞的源码[转]
    分批导出数据库记录
    DELPHI Winsock完成端口[转]
    由数据库排序差异引起的错误一例总结
    适配器模式
    JQuery+Asp.net+Webservice组成的Autocomplete示例
  • 原文地址:https://www.cnblogs.com/by-dxm/p/6221426.html
Copyright © 2011-2022 走看看