User Tools

Site Tools


deprecated:php:createuserobject

[PHP] create_user_object

6. Februar 2012: Ich habe festgestellt, dass die Funktionen nicht wirklich gebraucht werden. Dasselbe geht ja auch mit varialen Klassennamen. Ich lasse die Funktionen trotzdem mal stehen - interessant sind sie immer noch

$className = 'Testclass';
//Beide Zeile machen dasselbe. Die Zweite ist das Beispiel mit meiner Funktion (siehe weiter unten)
$obj = new $className('foo', 'bar');
$obj = create_user_object($className, 'foo', 'bar');

Analog zu call_user_func und call_user_func_array kann man mit diesen Funktionen ein Object aus einer Benutzerdefinierten Klasse erstellen

<?php
/**
* mpl           by ERB software
* @author       stefan.erb(at)erb-software.com
*/
 
 
/**
 * erstellt ein Object einer Klasse mit dem einer freien Anzahl Paramtern
 * @param   String  $className
 * @param   Variant
 * @return  Object
 * 
 * @example $obj = create_user_obj('myClass', $paramter1, $paramter2);
 */
function create_user_object($className){
	$params = func_get_args();
	$className = array_shift($params);
	return create_user_object_array($className, $params);
}
 
/**
 * erstellt ein Object einer Klasse mit dem Array $params als Argumente
 * @param   String  $className
 * @param   Array   $params
 * @return  Object
 * 
 * @example $obj = create_user_obj('myClass', array($paramter1, $paramter2));
 */
function create_user_object_array($className, $params = array()){
	$pStrings  = $params = array_values($params);    
	array_walk($pStrings, create_function('&$item, $key', '$item = "\$params[{$key}]";'));
	$php = 'return new $className(' . implode(',', $pStrings) . ');';       
	return eval($php);    
}
?>

Anwendungsbeispiel

<?php
include_once('../lib/functions/createUserObject.php');
 
$className = 'Testclass';
 
$classPhp = <<<EOT
class {$className}{
	public function __construct(\$foo, \$bar){
		\$this->foo = \$foo;
		\$this->bar = \$bar;
	}
	public function foobar(){
		return \$this->foo . \$this->bar;
	} 
}
EOT;
eval($classPhp);
 
$obj = create_user_object($className, 'foo', 'bar');
echo $obj->foobar();
 
?> 
deprecated/php/createuserobject.txt · Last modified: 11.12.2013 10:50:28 (external edit)