我有一个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
答案 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 ='某事';
如果您尝试调用数据库,它也可以工作。
我希望这会对你有所帮助。