J'ai essayé de comprendre comment faire cela mais je ne sais pas trop comment.
Voici un exemple de ce que j'essaie de faire:
class test {
public newTest(){
function bigTest(){
//Big Test Here
}
function smallTest(){
//Small Test Here
}
}
public scoreTest(){
//Scoring code here;
}
}
Voici la partie avec laquelle je rencontre des problèmes, comment appeler bigTest ()?
Essaye celui-là:
class test {
public function newTest(){
$this->bigTest();
$this->smallTest();
}
private function bigTest(){
//Big Test Here
}
private function smallTest(){
//Small Test Here
}
public function scoreTest(){
//Scoring code here;
}
}
$testObject = new test();
$testObject->newTest();
$testObject->scoreTest();
L'exemple que vous avez fourni n'est pas valide PHP et présente quelques problèmes:
public scoreTest() {
...
}
n'est pas une déclaration de fonction appropriée - vous devez déclarer des fonctions avec le mot clé 'function'.
La syntaxe devrait plutôt être:
public function scoreTest() {
...
}
Deuxièmement, encapsuler les fonctions bigTest () et smallTest () dans public function () {} ne les rend pas privées - vous devez utiliser le mot-clé private sur ces deux éléments individuellement:
class test () {
public function newTest(){
$this->bigTest();
$this->smallTest();
}
private function bigTest(){
//Big Test Here
}
private function smallTest(){
//Small Test Here
}
public function scoreTest(){
//Scoring code here;
}
}
De plus, il est habituel de mettre les noms de classe en majuscule dans les déclarations de classe ('Test').
J'espère que ça t'as aidé.
Je pense que vous cherchez quelque chose comme celui-ci.
class test {
private $str = NULL;
public function newTest(){
$this->str .= 'function "newTest" called, ';
return $this;
}
public function bigTest(){
return $this->str . ' function "bigTest" called,';
}
public function smallTest(){
return $this->str . ' function "smallTest" called,';
}
public function scoreTest(){
return $this->str . ' function "scoreTest" called,';
}
}
$test = new test;
echo $test->newTest()->bigTest();
class test {
public newTest(){
$this->bigTest();
$this->smallTest();
}
private function bigTest(){
//Big Test Here
}
private function smallTest(){
//Small Test Here
}
public scoreTest(){
//Scoring code here;
}
}
Pour appeler n'importe quelle méthode d'un objet instancié depuis une classe (avec statement new), vous devez "pointer" dessus. De l'extérieur, vous utilisez simplement la ressource créée par la nouvelle instruction. À l'intérieur de tout objet PHP créé par new, enregistre la même ressource dans la variable $ this. Ainsi, dans une classe, vous DEVEZ indiquer la méthode par $ this. Dans votre classe, pour appeler smallTest
depuis l'intérieur de la classe, vous devez indiquer à PHP lequel des objets créés par la nouvelle instruction que vous souhaitez exécuter, écrivez simplement:
$this->smallTest();
Vous devez appeler newTest
pour rendre les fonctions déclarées dans cette méthode "visibles" (voir Fonctions dans les fonctions ). Mais ce ne sont alors que des fonctions normales et aucune méthode.
Pour avoir une "fonction dans une fonction", si je comprends ce que vous demandez, vous avez besoin de PHP5.3, où vous pourrez tirer parti de la nouvelle fonctionnalité Closure.
Donc vous pourriez avoir:
public function newTest() {
$bigTest = function() {
//Big Test Here
}
}
class sampleClass
{
public function f1()
{
return "f1 run";
}
public function f2()
{
echo ("f2 run" );
$result = $this->f1();
echo ($result);
}
f2();
}
sortie:
f2 run f1 run
Vous pouvez également utiliser self::CONST
au lieu de $this->CONST
si vous souhaitez appeler une variable statique ou une fonction de la classe en cours.
exemple 1
class TestClass{
public function __call($name,$arg){
call_user_func($name,$arg);
}
}
class test {
public function newTest(){
function bigTest(){
echo 'Big Test Here';
}
function smallTest(){
echo 'Small Test Here';
}
$obj=new TestClass;
return $obj;
}
}
$rentry=new test;
$rentry->newTest()->bigTest();
exemple2
class test {
public function newTest($method_name){
function bigTest(){
echo 'Big Test Here';
}
function smallTest(){
echo 'Small Test Here';
}
if(function_exists( $method_name)){
call_user_func($method_name);
}
else{
echo 'method not exists';
}
}
}
$obj=new test;
$obj->newTest('bigTest')