note 111117 added to language.oop5.magic
| From: | guisoares2011 at hotmail dot com dot br | Date: | Thu, 17 Jan 2013 02:15:26 +0000 |
| Subject: | note 111117 added to language.oop5.magic | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-193119@lists.php.net to get a copy of this message | ||
Extensão do metodo __call
uso da class:
echo $class("nada")->strlen()->strlen();//1
<?php
/*
Bom vamos la primeiro para criar esse método em uma class é necessario ter 3 coisas em
primeira instancia
* metodo magico __call e __invoke,
* variavel protected args;
*/
class prototypeInPHP{
protected $args,
$msg_version = 'Team exe functions - Version 3.0 @Developer By If';
public function __invoke(){
#Metodo para receber os valores dos argumentos principais chamando a class com function
# $class('lalal');
#
#Pega valores passado nos argumentos da função
$vars = func_get_args();
#Se possuir apenas 1 indice pode simplicar colocando na var args deixando ela sem ser array
if(count($vars)==1){
$this->args = $vars[0];
}else{
$this->args = $vars;
}
return $this;
}
public function __toString(){
# With method only in method call others is forbiden
if(!isset($this->args)) return (string)$this->msg_version;
#Get Values of methdo call
$q='';
#<If array>
if(is_array($this->args))
foreach($this->args as $arg)
$q.= $arg.'<br />';
#</If array>
else
$q = $this->args;
return (string)$q
;}
public function __clone(){
return (isset($this->args) && (!is_array($this->args) ||
count($this->args<>0)))? $this->args:clone $this;
}
public function get_result(){
return $this->args
;}
public function __call($function, $args_function){
//Não executa pois não existe valor em args para executar o modo compilado
if(!isset($this->args))
return false;
//Funções de escape é utilizado pois existem funções onde elemento principal deve
constar no ultimo indice
// str_replace,preg_replace...
switch($function){
case 'str_replace':
if(is_array($this->args)){
//Backup pega os valores dos argumentos da função para não alterar a varivel
foreach($this->args as $key=>$arg){
$backup = $args_function;
//Adiciona arg no ultimo elemento de $backup para satisfazer a condição
//str_replace(oque_quer_Achar,como_vai_substituir, arg);
$backup[] = $arg;
//Chama a função
$this->args[$key] = call_user_func_array($function,$backup);
}
}else{
//Não tem problema adicionar em arg_function, pois nao tem loop
$args_function[] = $arg;
//Chama a função
$this->args[$key] = call_user_func_array($function,$backup);
}
//Para pode chamar outro comando
return $this;
break;
}
//escape finish...
if(is_array($this->args)){
foreach($this->args as $key=>$arg){
$backup = $args_function;
#Adiciona valor no primeiro indice da array
array_unshift($backup,$arg)
#Chama função e retorna valor
;$this->args[$key] = call_user_func_array($function,$backup);
}
}else{
#Adiciona valor no primeiro indice da array
array_unshift($args_function,$this->args)
#Chama função e retorna valor
;$this->args = call_user_func_array($function,$args_function)
;}
return $this;
}
}
?>
$new = new prototypeInPHP;
echo $new("Team Exe")->strlen();//8
echo $new->strlen();//1
----
Server IP: 69.147.83.199
Probable Submitter: 189.46.70.118
----
Manual Page -- http://php.net/manual/en/language.oop5.magic.php
Edit -- https://master.php.net/note/edit/111117
Del: integrated -- https://master.php.net/note/delete/111117/integrated
Del: useless -- https://master.php.net/note/delete/111117/useless
Del: bad code -- https://master.php.net/note/delete/111117/bad+code
Del: spam -- https://master.php.net/note/delete/111117/spam
Del: non-english -- https://master.php.net/note/delete/111117/non-english
Del: in docs -- https://master.php.net/note/delete/111117/in+docs
Del: other reasons-- https://master.php.net/note/delete/111117
Reject -- https://master.php.net/note/reject/111117
Search -- https://master.php.net/manage/user-notes.php