如何将方法调用为另一种方法的函数?

时间:2017-07-11 06:33:17

标签: php function methods

Here是我的代码:

class myclass{

    public function one(){
        return 'sth';
    }

    public function two(){
        function myfunc($arg){
            if ($arg){
                return $this->one();
            } else {
                return 'nothing';
            }
            myfunc(true);
        }
    }
}

$obj = new myclass;
echo $obj->$this->two();

正如你在小提琴中看到的那样,它会抛出这个错误:

  

致命错误:未捕获错误:当不在/ in / E1U9n中的对象上下文中时使用$ this:25

我该如何解决这个问题?预期结果为sth

2 个答案:

答案 0 :(得分:3)

  1. 首先你要调用myfunc(true);在它自己的范围内。所以它不是 据我所知,可以在其范围内调用一个函数
  2. 其次,您在功能范围内调用$ this,而该功能范围并不知道它属于哪个类。
  3. 第三,你没有从你的函数two()中返回任何东西,正如它所设想的那样。它不会回应任何东西。
  4. 查看小提琴https://3v4l.org/sl4eq

    class myclass{
    
        public function one(){
            return 'sth';
        }
    
        public function two(){
            function myfunc($arg){
                if ($arg){
                    $newobj = new myclass();
                    return $newobj->one();
                } else {
                    return 'nothing';
                }
    
            }
            return myfunc(TRUE);
        }
    }
    
    
    $obj = new myclass;
    echo $obj->two();
    

答案 1 :(得分:1)

你的代码非常混乱,因为你缺乏基本的知识和经验。我严格建议您阅读PHP中有关OOP的基础知识。 http://php.net/manual/en/language.oop5.php

<?php

class myclass {

    public function one()
    {
        return 'sth';
    }

    public function two()
    {
        return $this->myfunc(true);
    }

    protected function myfunc($arg)
    {
        if ($arg)
            return $this->one();
        else
            return 'nothing';
    }

}

$obj = new myclass;
echo $obj->two();