如何在 codeigniter 的嵌套函数中访问 $this 变量?
How to Access $this variable inside nested functions in codeigniter?
我有一个用于 Nu soap WSDL 的控制器 喜欢:
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"));
}
}
如何在 buy
函数中访问 $this
?
我尝试了 global $this
但发生了错误!
错误:
Fatal error: Using $this when not in object context in \controllers\webservice.php on line 9
你对整个概念的理解是错误的。 PHP 不是 Javascript.You 不应该嵌套函数,特别是在使用 OOP 框架时。如果你 运行 函数 index 两次,第二次你可能会得到一个错误,即函数 buy 已经被声明,因为 index 的第一个 运行 将声明函数 buy.
我会将它们声明为 class 成员函数/方法。
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 中使用全局变量。
如果有帮助请告诉我。
我明白你的问题了。我对 nusoap 也有同样的问题。注册服务时,您必须创建一个功能。因此,在 CI 中,您在 class 函数中创建它,这使得服务函数嵌套在内部,不能被带到外部。
你为什么不试试下面这个呢?我以前一直使用它,与助手等一起使用。它很简单,我已经尝试过并且有效。
将其放入您的嵌套函数中:
$ci =& get_instance();
其余的你必须用 $ci 替换 $this
当量。 $ci->some_model->some_function();或 $ci->some_var = 'something';
如果您尝试调用数据库,它也可以工作。
希望对您有所帮助。
我有一个用于 Nu soap WSDL 的控制器 喜欢:
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"));
}
}
如何在 buy
函数中访问 $this
?
我尝试了 global $this
但发生了错误!
错误:
Fatal error: Using $this when not in object context in \controllers\webservice.php on line 9
你对整个概念的理解是错误的。 PHP 不是 Javascript.You 不应该嵌套函数,特别是在使用 OOP 框架时。如果你 运行 函数 index 两次,第二次你可能会得到一个错误,即函数 buy 已经被声明,因为 index 的第一个 运行 将声明函数 buy.
我会将它们声明为 class 成员函数/方法。
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 中使用全局变量。
如果有帮助请告诉我。
我明白你的问题了。我对 nusoap 也有同样的问题。注册服务时,您必须创建一个功能。因此,在 CI 中,您在 class 函数中创建它,这使得服务函数嵌套在内部,不能被带到外部。
你为什么不试试下面这个呢?我以前一直使用它,与助手等一起使用。它很简单,我已经尝试过并且有效。
将其放入您的嵌套函数中: $ci =& get_instance();
其余的你必须用 $ci 替换 $this 当量。 $ci->some_model->some_function();或 $ci->some_var = 'something';
如果您尝试调用数据库,它也可以工作。
希望对您有所帮助。