Sınıf yöntemi içinde bir işlevi çağırmadan?

5 Cevap php

Bunu hakkında gitmek nasıl anlamaya çalışıyorlar ama ben nasıl emin değilim.

İşte yapmak ne çalışıyorum bir örnek:

class test {
     public newTest(){
          function bigTest(){
               //Big Test Here
          }
          function smallTest(){
               //Small Test Here
          }
     }
     public scoreTest(){
          //Scoring code here;
     }
}

İşte ben, nasıl bigTest diyorsunuz () ile sorunlar yaşıyorum parçasıdır?

5 Cevap

Bunu dene:

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();

Verdiğiniz örnek geçerli PHP değil ve bazı sorunlar var:

public scoreTest() {
    ...
}

uygun bir işlev bildirimi değil - 'fonksiyon' sözcüğünde fonksiyonlarını bildirmek gerekir.

Sözdizimi oldukça olmalıdır:

public function scoreTest() {
    ...
}

İkincisi, bigTest () ve kamu fonksiyonu smallTest () işlevleri sarma () {} onları özel yapmaz - tek tek bu ikisi üzerinde özel anahtar kelime kullanmanız gerekir:

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;
    }
}

Ayrıca, sınıf bildirimleri sınıf adlarını yararlanmak için kongre ('Test') 'dir.

Umut olur.

(Bakınız Functions within functions) "görünür" bu yöntemi içinde ilan fonksiyonlarını yapmak için newTest aramak gerekir. Ama o zaman sadece normal fonksiyonları ve hiçbir yöntem vardır.

Bir "bir işlev içinde işlev" olması için, ben size soruyoruz anlamak eğer, size yeni kapatma özelliği yararlanabilirsiniz PHP 5.3, gerekir.

Yani olabilir:

public function newTest() {
   $bigTest = function() {
        //Big Test Here
   }
}

example 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();

example2

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')