在Class方法中调用函数?


108

我一直在试图找出如何做到这一点,但我不确定如何做到。

这是我要执行的操作的一个示例:

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

这是我遇到的问题,该如何调用bigTest()?


2
只是要确保:函数和方法与函数===方法完全相同。在OO语言中,经常使用术语“方法”来描述类的功能。
markus

缺少某些术语的原因是我正要离开办公室,所以我的时间很短。
2009年

Answers:


201

试试这个:

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
是否可以function()在类函数内的另一个.php页面中运行a ,然后在类函数内获取结果?例如,我有一个查询,该查询从表中选择所有内容,然后返回获取所有结果集。是否可以在类函数中遍历该结果集?例如class query{ public function show(){ getResults(); while($stmt->fetchCollumn()){ ECHO RESULTS HERE }
James111

22

您提供的示例不是有效的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;
    }
}

同样,惯例是在类声明(“ Test”)中将类名大写。

希望能有所帮助。


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

10

我认为您正在寻找类似的东西。

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

3

您需要调用newTest以使在该方法内部声明的函数“可见”(请参见函数中的函数)。但这只是正常功能,而没有方法。


3

为了使“功能在函数中”,如果我理解您的要求,则需要PHP 5.3,可以在其中使用新的Closure功能。

因此,您可以:

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

3

要调用从类实例化的对象的任何方法(使用new语句),您需要“指向”它。从外部,您只需使用新语句创建的资源。在new创建的任何PHP对象内部,将相同资源保存到$ this变量中。因此,在类内,您必须使用$ this指向方法。在您的类中,smallTest要从类内部调用,必须告诉PHP要执行由新语句创建的所有对象中的哪一个,只需编写:

$this->smallTest();

致命错误:不在对象上下文中时使用$ this
Stnfordly,

2

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

例子2

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

$ rentry-> newTest()-> bigTest(); $ rentry-> newTest()-> smallTest(); ----致命错误:不能重新声明bigTest()(先前声明
tfont


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.