我是Code igniter / OOP的新手,但试图解决这个问题。
我正在尝试制作一个可以在我的代码中使用的助手;这就是它的样子:
if ( ! function_exists('email'))
{
function email($type, $to, $subject, $object)
{
switch($type){
case 'new':
$body = "Hello ". $object['FirstName'] . ' ' . $object['LastName'] . ","
. "<p/><p/>Thank you.";
break;
}
// Send it
$this->load->library('email');
$this->email->to($to);
$this->email->from('blah@website.com', 'James');
$this->email->subject($subject);
$this->email->message($body);
$this->email->send();
}
}
然后我将它包含在帮助部分的自动加载中。
当我尝试在我的控制器中访问它时,我收到错误。
$obect['FirstName']='Carl';
$obect['LastName']='Blah';
email('new', 'test@website.com', 'test', $object);
以下是我收到的错误:
Fatal error: Using $this when not in object context in C:\inetpub\wwwroot\attrition\application\helpers\email_helper.php on line 17
答案 0 :(得分:1)
您将使用该变量而不是$ this
所以,你的$这是由此改变的
$CI =& get_instance();
如何使用?通常你使用$ this喜欢
$this->load->other();
// change to
$CI->load->other();
应该是工作
答案 1 :(得分:0)
将您的功能更改为此代码:
if ( ! function_exists('email'))
{
function email($type, $to, $subject, $object)
{
switch($type){
case 'new':
$body = "Hello ". $object['FirstName'] . ' ' . $object['LastName'] . ","
. "<p/><p/>Thank you.";
break;
}
// Send it
$this = &get_instance(); // here you need to get instance of codeigniter for use it
$this->load->library('email');
$this->email->to($to);
$this->email->from('blah@website.com', 'James');
$this->email->subject($subject);
$this->email->message($body);
$this->email->send();
}
}
答案 2 :(得分:0)
不在对象上下文中时使用 $ this
这只是意味着你不能在对象(类)之外使用 $ this 关键字, 正如@Kryten指出的那样。
助手通常仅用于嵌入html,例如格式化数据。
<p><?php echo formatHelper(escape($var)); ?></p>
您需要做的是阅读一些关于创建Library。
的内容