/* + ------------------------------------------------------------------------------- + | = Read this article for haohappy <core PHP programming> | = Notes in the classes and objects chapter | = Translation-oriented + personal experiences | = Do not repost it to avoid unnecessary troubles. Thank you. | = Thank you for your criticism and hope to make progress together with all PHP fans! + ------------------------------------------------------------------------------- + */Section 11th -- overload PHP 4 already has an overloaded syntax to map external object models, just like Java and COM. phP5 brings powerful object-oriented overloading, allowing programmers to establish custom behaviors to access attributes and call methods. You can use several special methods of _ Get, _ set, and _ call for overloading. php will call these methods when the Zend engine tries to access a member and cannot find it. In Example 6.14, __get and _ set replace all accesses to the attribute variable array. if necessary, you can implement any type of filter you want. for example, a script can disable attribute values and use a certain prefix or contain certain types of values at the beginning. The _ call method describes how to call an undefined method. when you call an undefined method, the method name and parameters received by the method will be passed to the _ call method, and the value of _ call passed by PHP will be returned to the undefined method. Listing 6.14 user-level Overloading <? PHP Class overloader { Private $ properties = array (); Function _ Get ($ property_name) { If (isset ($ this-> properties [$ property_name]) { Return ($ this-> properties [$ property_name]); } Else { Return (null ); } } Function _ set ($ property_name, $ value) { $ This-> properties [$ property_name] = $ value; } Function _ call ($ function_name, $ ARGs) { Print ("invoking $ function_name () <br> N "); Print ("arguments :"); Print_r ($ ARGs ); Return (true ); } } $ O = new overloader (); // Invoke _ set () assigns a value to a non-existent attribute variable and activates _ set () $ O-> dynaprop = "dynamic content "; // Invoke _ Get () Activate _ Get () Print ($ o-> dynaprop. "<br> N "); // Invoke _ call () Activate _ call () $ O-> dynamethod ("Leon", "Zeev "); ?> |