PHP 5.3 New Magic Method __invoke Overview

Source: Internet
Author: User
Tags php example
PHP has been adding a magic method called __invoke since version 5.3, which allows the object to be called directly after the instance is created. As shown in the following example:

Class Testclass{public function __invoke{print "Hello World";}} $n = new TestClass; $n ();

The result of the execution is:

Hello world.

The official PHP example is as follows:

Class Callableclass{public function __invoke ($x) {var_dump ($x);}} $obj = new Callableclass; $obj (5); Var_dump (Is_callable ($obj));

Attached: PHP Other magic methods in detail:

Classes in PHP can use the Magic method. The rules that begin with two underscores (__) are preserved as magic methods, so it is recommended that you do not start with the function name unless you are trying to reload the existing magic method.

The function names __construct, __destruct, __call, __callstatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toS Tring, __invoke, __set_state And__clone is magical in PHP classes. You cannot has functions with these names in any of your classes unless your want the Magic functionality associated with them.

The following two methods are designed for properties that are not declared in the class and their parent class.
__get ($property) When an undefined property is called, this method is triggered, and the passed parameter is the property name that is accessed.
__set ($property, $value) when assigning a value to an undefined property, this method is triggered, and the passed parameter is the property name and value that is set.
There is no declaration here that the access control is a Proteced,private property (that is, a property without permission access) when using object invocation.
As with the __get method and the __set method, there is no declaration here that the access control is a property of Proteced,private when using an object invocation (that is, a property that does not have permission to access).

The undefined method here includes a method that does not have permission to access, if the method does not exist in the parent class to find this method, if the parent class does not exist to call the __call () method of this class, if there is no __call () method in this class to find the __call () method in the parent class.

The __autoload function, which is called automatically when trying to use a class that has not yet been defined. By calling this function, the scripting engine has the last chance to load the required classes before PHP fails.

Note: Exceptions thrown in the __autoload function cannot be caught by a catch statement block and cause a fatal error, so the function itself should be captured.

__construct constructs a method that calls this method when an object is created, and the advantage of using this method with respect to PHP4 is that the constructor can have a unique name, regardless of the name of the class in which it resides. So you don't need to change the name of the constructor when you change the name of the class.

__destruct destructor, PHP calls this method before the object is destroyed (that is, before it is purged from memory). By default, PHP simply frees the memory occupied by the object's properties and destroys the object-related resources, and the destructor allows you to execute arbitrary code to clear the memory after using an object. When PHP decides that your script is no longer related to the object, the destructor is called.

Within the namespace of a function, this occurs at the time of the function return. For global variables, this happens at the end of the script. If you want to explicitly destroy an object, you can assign any other value to the variable that points to the object. You typically assign a variable to null or call unset.

The object assignment in PHP5 is to use a reference assignment, and if you want to copy an object then you need to use the Clone method, which is called by the object to call the __clone Magic method automatically, if the object replication requires some initialization to be performed, it can be implemented in the __clone method.

The __tostring method is called automatically when an object is converted to a string, such as when using Echo to print an object.

Before php5.2.0, the __tostring method can only take effect if the echo () or print () is used in combination. After php5.2.0, you can take effect in any string environment (for example, with the%s modifier through printf (), but not in a non-string environment, such as using the%d modifier). From php5.2.0, a e_recoverable_error error is reported if an object with an undefined __tostring method is converted to a string.

__wakeup Crossdress is called when the line is being serialized

Serialize () checks the class for a function that has the magic name __sleep. If so, the function will run before any serialization. It clears the object and should return an array containing all the variable names that should be serialized in the object.

The purpose of using __sleep is to close any database connections that an object might have, submit data for waiting, or perform similar cleanup tasks. In addition, this function is useful if you have very large objects and do not need to be fully stored.

PHP instead, unserialize () checks for the existence of a function with the magic name __wakeup. If present, this function can reconstruct any resources that an object might have. The purpose of using __wakeup is to reconstruct any database connections that may be lost in serialization and to handle other reinitialization tasks.
The __invoke method is called automatically when an attempt is made to invoke an object in a way that invokes a function.

It works like the __call () Magic Method, __callstatic () is to handle static method calls.

PHP does strengthen the definition of the __callstatic () method; it must be public and must be declared static. Similarly, the __call () Magic method must be defined as public, and all other magic methods must do so.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.