Я пытался выяснить, как это сделать, но я не совсем уверен, как это сделать.
Вот пример того, что я пытаюсь сделать:
class test { public newTest(){ function bigTest(){ //Big Test Here } function smallTest(){ //Small Test Here } } public scoreTest(){ //Scoring code here; } }
Вот часть, с которой у меня возникают проблемы, как я могу назвать bigTest ()?
Попробуй это:
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();
Образец, который вы предоставили, недействителен PHP и имеет несколько проблем:
public scoreTest() { ... }
не является надлежащим объявлением функции – вам нужно объявить функции с ключевым словом «function».
Синтаксис должен быть скорее:
public function scoreTest() { ... }
Во-вторых, обертывание функций bigTest () и smallTest () в public function () {} не делает их частными – вы должны использовать ключевое слово private по обоим из них отдельно:
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; } }
Кроме того, принято утверждать, что имена классов называются в объявлениях классов («Тест»).
Надеюсь, это поможет.
Я думаю, вы ищете что-то вроде этого.
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();
Чтобы вызвать любой метод объекта, созданного экземпляром класса (с инструкцией new), вам нужно «указать» на него. С внешней стороны вы просто используете ресурс, созданный новым оператором. Внутри любого объекта PHP, созданного новым, сохраняется тот же ресурс в переменной $ this. Итак, внутри класса вы ДОЛЖНЫ указывать на метод $ this. В своем классе, чтобы вызвать smallTest
изнутри класса, вы должны указать PHP, какой из всех объектов, созданных новым оператором, который вы хотите выполнить, просто напишите:
$this->smallTest();
Вам нужно вызвать newTest
чтобы функции, объявленные внутри этого метода, были «видимыми» (см. Функции внутри функций ). Но это тогда обычные функции и методы.
Чтобы иметь «функцию внутри функции», если я понимаю, что вы просите, вам нужен PHP 5.3, где вы можете воспользоваться новой функцией Closure.
Таким образом, вы могли бы:
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(); }
вывод :
Запуск f2 запустите f1
Вы также можете использовать self::CONST
вместо $this->CONST
если вы хотите вызвать статическую переменную или функцию текущего класса.
пример 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')
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; } }