如何在codeigniter中的嵌套函数中访问$ this变量?

时间:2015-06-03 23:43:36

标签: php codeigniter nusoap

我有一个Nu soap WSDL的控制器Like:

    class webservice extends CI_Controller
        {
        function index()
        {
              $this->load->library('encrypt');
              $this->load->model('MWSDl');
//...
            function buy($apicode)
            {
                if(!$this->MWSDl->check_gateway($apicode)) //Error occurred  php Cannot find "$this" Variable
            }
//...
            $this->nusoap_server->service(file_get_contents("php://input"));
        }
    }

如何在$this功能中访问buy? 我试过global $this但是错误发生了!
错误:
Fatal error: Using $this when not in object context in \controllers\webservice.php on line 9

2 个答案:

答案 0 :(得分:1)

你对整个概念都是错的。 PHP不是Javascript.You不应该嵌套函数,特别是在使用OOP框架时。如果你运行两次函数索引,第二次你可能会得到一个错误,即函数buy已经被声明,因为第一次运行索引会声明函数buy。

我会将它们声明为类成员函数/方法。

class Webservice extends CI_Controller {

        function __construct()
        {
             parent::construct();
             $this->load->library('encrypt');
             $this->load->model('MWSDl');
        }

        function index()
        {
            // do something like
            $apicode = 'xxxxxx';
            $this->buy($apicode);

            //or  what ever else you need to do
        }


        function buy($apicode)
        {
            if(!$this->MWSDl->check_gateway($apicode)) {

                $this->nusoap_server->service(file_get_contents("php://input"));

            }
        }
    }

无需在codeigniter中使用全局变量。

如果有帮助,请告诉我。

答案 1 :(得分:0)

我理解你的问题。我也遇到了与nusoap相同的问题。注册服务时,您必须创建一个功能。因此,在CI中,您在类函数中创建它,使得服务函数嵌套在内部,并且不能在外部使用。

为什么不在下面试试?我以前一直使用它,有助手等。它很简单,我已经尝试过了,它有效。

将它放在嵌套函数中: $ ci =& get_instance();

其余的你必须用$ ci替换$ this EQ。 $ CI-> some_model-> some_function();或$ ci-> some_var ='某事';

如果您尝试调用数据库,它也可以工作。

我希望这会对你有所帮助。