Bonjour,PHP forward_static_call_array dans un contexte de classe non statique
je le testcase suivant que je ne peux pas travailler correctement.
<?php
class TestClass{
private $obj = NULL;
public function __construct(){
$this->obj = new SubClass();
}
public function test(){
forward_static_call_array('SubClass::callMe', func_get_args());
}
}
class SubClass{
public function callMe(){
echo 'YES WE FETCHED : '.PHP_EOL.print_r(func_get_args(), true);
}
}
$test = new TestClass();
$test->test('John', 'Doe', array('Peter', 'Dora'), array('Anthony', 'William'));
?>
Comme vous le voyez, j'ai deux classes.
1 TestClass
Ceci est une classe non statique qui est beeing appelé par:
$test = new TestClass();
$test->test('John', 'Doe', array('Peter', 'Dora'), array('Anthony', 'William'));
Dans le TestClass() je charge avec un constructeur une nouvelle classe dans la classe parente.
public function __construct(){
$this->obj = new SubClass();
}
Ensuite, je charge une méthode de classe appelée test() avec la ligne suivante:
$test->test('John', 'Doe', array('Peter', 'Dora'), array('Anthony', 'William'));
Cette méthode récupère alors les arguments de la fonction avec: func_get_args() et transmet tous les arguments avec forward_static_call_array()
Comme suit:
public function test(){
forward_static_call_array('SubClass::callMe', func_get_args());
}
Appeler par:
- SubClass :: callme
fait une classe statique. Et logiquement, je reçois un message d'erreur:
normes strictes: forward_static_call_array() attend le paramètre 1 pour être un rappel valide, méthode non statique SubClass :: callme() ne doit pas être appelée de façon statique dans N: \ wamp \ www \ test \ forward_arguments \ testclass.php sur la ligne 15
2 SubClass
Le subClass récupère les arguments comme suit:
public function callMe(){
echo 'YES WE FETCHED : '.PHP_EOL.print_r(func_get_args(), true);
}
Maintenant, avec cette configuration, l'avis d'erreur est logique. Et la variable classe TestClass
private $obj = NULL;
get complètement évité.
$this->obj = new SubClass();
Le problème spécifique
La ligne de problème est celui-ci:
forward_static_call_array('SubClass::callMe', func_get_args());
La syntaxe doit être différente. Mais je n'ai aucune idée de comment. Merci d'avance!
Edit:
Le problème est que je ne sais comment appeler des méthodes statiques de classe. Mais je ne sais pas comment appeler une méthode dans une classe chargée.
Solution
(fourni par: Rizier123)
<?php
class TestClass{
private $obj = NULL;
public function __construct(){
$this->obj = new SubClass();
$this->obj->SetExtra(array('Karel', 'Anton'));
}
public function test(){
forward_static_call_array([$this->obj, 'callMe'], func_get_args());
}
}
class SubClass{
private $SetVar = NULL;
public function callMe(){
$Array = $this->ArrayStrUp(array_merge(func_get_args(), $this->SetVar));
echo 'YES WE FETCHED : '.PHP_EOL.print_r($Array, true);
}
public function SetExtra($vars){
$this->SetVar = $vars;
}
private function ArrayStrUp($Arr){
foreach($Arr as $key => $value){
if(is_array($value) === true){
$Arr[$key] = $this->ArrayStrUp($value);
}
else{
$Arr[$key] = strtoupper($value);
}
}
return($Arr);
}
}
$test = new TestClass();
$test->test('John', 'Doe', array('Peter', 'Dora'), array('Anthony', 'William'));
?>
Que penseriez-vous en tant que sortie et quel est votre sortie courant? De plus, vous n'avez aucune fonction statique dans vos classes! – Rizier123
Je sais. Et je veux utiliser la variable de classe $ obj Donc, il devrait être 'forward_static_call_array ('$ this-> obj-> callMe', func_get_args());' Mais cela ne fonctionne pas: -o –