You are here: Re: [PHP] variable object creating « PHP « IT news, forums, messages
Re: [PHP] variable object creating

Posted by olivier on 09/28/30 11:19

---------- Message transmis ----------

Subject: Re: [PHP] variable object creating
Date: Mercredi 22 Juin 2005 14:19
From: olivier <olivier.devaine@gmail.com>
To: php-general@lists.php.net

Sorry for typo error, just need my cup of cofee...

Here is a good post for:
http://fr.php.net/manual/fr/function.call-user-func-array.php

################################################################
from taylor
08-May-2005 12:04
<?php
/**
* Create an object of a specified type using an array as the parameters
* to the constructor. NOTE: does not maintain proper
* types for the arguments. They are all converted to strings.
* @param $type Type type of object to create (class name)
* @param $args The arguments to pass to the constructor
*/
function createObjArray($type, $args=array()) {
if ( !class_exists($type) ) {
return NULL;
}

// build argument list; be sure to escape string delimeters
$func = create_function('$str', 'return str_replace("\'","\\\'",
$str);');
$sargs = "'" . join( "','", array_map($func,$args) ). "'";

// build & eval code; return result
$seval = "return new $type($sargs);";
return eval($seval);
}
?>
#################################################################

I dont like eval too but i think that is depending on the pb we want to
solve... if you can change contrutor from each object may be better to use
jockem solution that is more secure (added some change for php4).

#################################################################
class Test
{
var $v;
// constructor for php4
function Test($args){
$this->__construct($args);
}
// constructor for php5
function __construct($args = array())
{
extract((array) $args);
$this->v=$v;
}
}

$className = "Test";
$construct_params = array("v"=>"param1","param2","param3");

//if (class_exists($className, false)) { ---> for php5
if (class_exists($className)) { // for php4
$obj = new $className($construct_params);
} else {
die("Hack off mate.");
}

var_dump($obj);
##################################################################

> // I had to test this to see if it works! the first 2 attempts are
> bogus // but you can run them to see what happens -- also the 3 attempt is
> a pretty // weird construction and I would be interested to know if anybody
> has thoughts // on calling the ctor in this way (essentially calling it
> twice) //

Never see a such solution, but may use a register funct instead...

##################################################################
class Test
{
var $v;

function Register($objName, $v=1){
# auto register object if needed
if(!isset($GLOBALS[$objName])){
$GLOBALS[$objName]=true;
$GLOBALS[$objName]=new Test($v);
}else{
return $GLOBALS[$objName];
}
}

function Test($v){
$this->__construct($v);
}

function __construct($v)
{
$this->v=$v;
}
}

$className = "Test";
$construct_params = array("obj", "param1","param2","param3");
//if (class_exists($className, false)) { ---> for php5
if (class_exists($className)) { // for php4
call_user_func_array(array(($className), "Register"), $construct_params);
} else {
die("Hack off mate.");
}

var_dump($obj);
##################################################################

Love phpsec too ;-)
Hope this finaly help!
Olivier

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация