Heim > Artikel > Backend-Entwicklung > Erstellen Sie dynamisch PHP-Klassenfunktionen oder -Funktionen
1. Grundlegende
Variablenfunktion:
<?php $func = 'test'; function test(){ echo 'yes !'; } $func(); ?>Zufallsfunktion:
<?php $newfunc = create_function('$a,$b', 'return $a.$b;'); echo "New anonymous function: $newfunc<br>"; echo $newfunc('just', 'coding'); ?>create_function – Erstellen Sie eine anonyme (Lambda-) style)-FunktionErstellt eine anonyme Funktion. Diese Funktion wird hauptsächlich in den Rückruffunktionen von unsort und array_walk verwendet $a, $b sind Parameter, 'return $a, $b' ist der Code der Funktion
Rückruffunktion:
<?php //5.3 以前 $array = array( 'asbc', 'ddd', 'tttt', 'qqq'); array_walk($array,create_function('&$item','$item=strtoupper($item);') ); //function(&$itm){$itm = strtoupper($itm);} print_r($array); //5.3 以后 $array = array( 'asbc', 'ddd', 'tttt', 'qqq'); array_walk($array,function(&$itm){$itm = strtoupper($itm);}); print_r($array); ?>array_walk(array,function,userdata...)array_walk()-Funktion wendet eine Rückruffunktion auf jedes Element im Array an. Gibt bei Erfolg TRUE zurück, andernfalls FALSE. Normalerweise akzeptiert eine Funktion zwei Parameter. Als erster Wert wird der Wert des Array-Parameters und als zweiter der Schlüsselname verwendet. Wenn der optionale Parameter userdata angegeben wird, wird er als dritter Parameter an die Callback-Funktion übergeben.
2. Instanzen erstellen dynamisch Klassenfunktionen
<?php /* create class */ class Record { /* record information will be held in here */ private $info; /* constructor */ function Record($record_array) { $record_array['body'] = 'this is a new attribution'; $this->info = $record_array; } /* dynamic function server */ function __call($method,$arguments) { $meth = $this->from_case(substr($method,3,strlen($method)-3)); return array_key_exists($meth,$this->info) ? $this->info[$meth] : false; } function from_case($str) { $str[0] = strtolower($str[0]); $func = create_function('$c', 'return "_" . strtolower($c[1]);'); // function ($c) { return "_" . strtolower($c[1]); } return preg_replace_callback('/([A-Z])/', $func, $str); } } /* usage */ $Record = new Record( array( 'id' => 12, 'title' => 'Greatest Hits', 'description' => 'The greatest hits from the best band in the world!' ) ); /* proof it works! */ echo 'The ID is: '.$Record->getId().'<br>'; // returns 12 echo 'The Title is: '.$Record->getTitle().'<br>'; // returns "Greatest Hits" echo 'The Description is: '.$Record->getDescription().'<br>'; //returns "The greatest hits from the best band in the world!" echo 'The Body is: '.$Record->getBody(); //returns "The greatest hits from the best band in the world!" ?>Die wichtigsten Punkte sind: __call und create_function