How to prevent errors by calling methods that do not exist, using the __call magic reload method.
The __call method is prototyped as follows: Mixed __call (string $name, array $arguments) the __call () is called when an inaccessible method is called, such as undefined or invisible. where $ The name parameter is the names of the methods to invoke. The $arguments parameter is an array of arguments that the containing person will pass to the method, as follows:
<?phpclass handsonboy{ Private $name = ' Chenqionghe '; Private $age =; Public Function __call ($name, $arguments) { switch (count ($arguments)) {case 2: echo $arguments [0] * $arguments [1],php_eol; break; Case 3: echo array_sum ($arguments), Php_eol; break; Default: echo ' parameter is wrong ', php_eol; Break;}}} $a = new Handsonboy (), $a->make (5), $a->make (5,6);
The above code simulates overloading in similar other languages based on the parameter type. The Rubik's Cube method with __call is __callstatic. Of course, using the Magic method "to prevent calls to the non-existent method surface error" is not the essence of the Magic method. In fact, The Magic method uses the dynamic creation of methods to become possible. This is a useful syntax in framework design such as MVC. If a controller calls a method that does not exist, it can be handled very nicely by defining the __call magic method. The following code uses _ Callstatic This magic method for dynamic creation and delay binding of methods to implement a simple ORM model
<?phpabstract class activerecord{protected static $table; protected $fieldvalue; Public $select; static function FindByID ($id) {$query = "select * from". Static:: $table. "WHERE id= $id"; Return Self::createdomain ($query); } function __get ($fieldname) {return $this->fieldvalues[$fieldname]; } static function __callstatic ($method, $args) {$field = Preg_replace ('/^findby (\w*) $/', ' $ ', $method); $query = "SELECT * from". Static:: $table. "WHERE $field = ' $args [0] '"; Return Self::createdomain ($query); The private static function CreateDomain ($query) {$class = Get_called_class ();//Gets the class name of the static method call $domain = N EW $class (); $domain->fieldvalues = Array (); $domain->select = $query; foreach ($class:: $fields as $field = + $type) {$domain->fieldvalues[$field] = ' todo:set from SQL R Esult by '. $field; } return $domain; }}class Customer extends activerecord{protected static $table = ' Custdb '; protected static $fields = array (' id ' = ' = ' int ', ' email ' = ' int ', ' lastname ' = ' varchar ') );} Class Sales extends activerecord{protected static $table = ' SalesDB '; protected static $fields = array (' id ' = ' = ' int ', ' item ' = ' varchar ', ' qty ' = ' = ' int ');} Var_dump (Customer::findbyid (123)->select) Var_dump (Customer::findbyid (123)->email); Var_dump (Sales:: Findbylastname (' Denoncourt ')->select);
__call and __callstatic Methods in PHP