在类方法中调用函数?

Posted

技术标签:

【中文标题】在类方法中调用函数?【英文标题】:Calling a function within a Class method? 【发布时间】:2010-12-16 01:25:49 【问题描述】:

我一直在想办法做到这一点,但我不太确定该怎么做。

这是我正在尝试做的一个示例:

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

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

【问题讨论】:

只是为了确保:一个函数和一个方法是完全相同的函数 === 方法。方法一词在 OO 语言中更常用于描述类的功能。 缺少某些条款的原因是我正在离开办公室的路上,所以时间不够。 如果你需要从 scoreTest 中调用 bigTest fn,你必须调用它 $this->bigTest(); 【参考方案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;
    
 

【讨论】:

【参考方案2】:
  class sampleClass
     
        public function f1()
        
           return "f1 run";
        

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

    f2();  

    

输出:

f2 运行 f1 运行

【讨论】:

【参考方案3】:

如果要调用当前类的静态变量或函数,也可以使用self::CONST 代替$this->CONST

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

$this->smallTest();

【讨论】:

致命错误:不在对象上下文中使用 $this【参考方案6】:

示例 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()(之前声明过。【参考方案7】:

您提供的示例不是有效的 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')中类名大写是惯例。

希望对您有所帮助。

【讨论】:

【参考方案8】:

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

所以你可以:

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

【讨论】:

【参考方案9】:

试试这个:

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 页面运行function(),然后在类函数内获取结果?例如,我有一个查询,它从表中选择所有内容,然后返回一个获取所有结果集。是否可以在类函数中循环该结果集?例如class query public function show() getResults(); while($stmt->fetchCollumn()) ECHO RESULTS HERE 【参考方案10】:

您需要调用newTest 以使在该方法中声明的函数“可见”(请参阅​​Functions within functions)。但这只是普通函数,没有方法。

【讨论】:

以上是关于在类方法中调用函数?的主要内容,如果未能解决你的问题,请参考以下文章

Tkinter - 在类中使用Button命令从另一个类调用函数

C++函数调用运算符 函数对象 函数指针

调用成员函数指针

python 在类中从一个函数中调用另一个函数中的变量

在类中引用函数时出现“调用没有匹配函数”

如何在类中调用函数?