2009-11-12 3 views
82

Я пытался выяснить, как это сделать, но я не совсем уверен, как это сделать.Вызов функции в методе класса?

Вот пример того, что я пытаюсь сделать:

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

Вот часть я имею проблемы с, как я называю bigTest()?

+2

Просто чтобы убедиться: функции и метод точно такой же функции === метод. Термин метод чаще всего используется в языке OO для описания функции класса. – markus

+0

Причина, по которой некоторые из этих терминов отсутствуют, я был на своем пути из офиса, поэтому я был недолгим. – WAC0020

ответ

3

Чтобы сделать функции, объявленные внутри этого метода «видимыми», необходимо вызвать newTest (см. Functions within functions). Но это тогда обычные функции и методы.

173

Попробуйте это:

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

Возможно ли запустить функцию() 'с другой .php-страницы внутри функции класса и затем получить результаты внутри функции класса? например, у меня есть запрос, который выбирает все из таблицы, а затем возвращает выборку всего результирующего набора. Можно ли пропустить этот набор результатов внутри функции классов? например, 'class query {public function show() { getResults(); while ($ stmt-> fetchCollumn()) { ECHO РЕЗУЛЬТАТЫ ЗДЕСЬ } ' – James111

3

Для того, чтобы иметь «функцию в функции», если я понимаю, что вы просите, вам нужно PHP 5.3, где вы можете воспользоваться новой Closure особенность.

Таким образом, вы могли бы:

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

Образец Предоставлена ​​не действует PHP и имеет несколько вопросов:

public scoreTest() { 
    ... 
} 

не является собственной функцией декларации - вы должны объявить функции с ключевым словом 'function'.

Синтаксис должен скорее быть:

public function scoreTest() { 
    ... 
} 

Во-вторых, обертывание bigTest() и функции в общественной функции smallTest()() {} не делает их частные - вы должны использовать частный ключевое слово на обоих из них в отдельности:

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

Кроме того, это условность прописных букв имен классов в объявлении класса («Test»).

Надеюсь, что это поможет.

0

пример 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') 
+0

$ rentry-> newTest() -> bigTest(); $ rentry-> новыйTest() -> маленькийTest(); ---- Неустранимая ошибка: не удается переопределить bigTest() (ранее объявлено. – tfont

4

Чтобы вызвать любой метод объекта реализованного из класса (с утверждением нового), вам нужна "точка" на него , С внешней стороны вы просто используете ресурс, созданный новым оператором. Внутри любого объекта PHP, созданного новым, сохраняет тот же ресурс в переменной $ this. Итак, внутри класса вы ДОЛЖНЫ указывать на метод $ this. В вашем классе, чтобы позвонить smallTest внутри класса, вы должны указать PHP, какой из всех объектов, созданных в новой постановке вы хотите выполнить, просто написать:

$this->smallTest(); 
6

Я думаю, что вы ищете что-то вроде вот этот.

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

Вы также можете использовать self::CONST вместо $this->CONST, если вы хотите вызвать статическую переменную или функцию текущего класса.

2
class sampleClass 
    { 
     public function f1() 
     { 
      return "f1 run"; 
     } 

     public function f2() 
     { 
      echo ("f2 run"); 
      $result = $this->f1(); 
      echo ($result); 
     } 

    f2(); 

    } 

выход:

f2 запустить f1 запустить

1
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; 
    } 
} 
Смежные вопросы