Php 为什么我的链接方法不起作用?
我正在尝试编写一个显示错误的类。我希望能在一条线上完成。这就是我用来显示错误的地方:Php 为什么我的链接方法不起作用?,php,methods,chaining,Php,Methods,Chaining,我正在尝试编写一个显示错误的类。我希望能在一条线上完成。这就是我用来显示错误的地方: $this->error->title("Error Title")->message("This is an error message")->redirect('home')->display(); 这是我的班级: <?php class Error { var $title; var $message; var $redirect;
$this->error->title("Error Title")->message("This is an error message")->redirect('home')->display();
这是我的班级:
<?php
class Error {
var $title;
var $message;
var $redirect;
function title($title){
$this->title = $title;
}
function message($message){
$this->message = $message;
}
function redirect($redirect){
$this->redirect = $redirect;
}
function display(){
$CI &= get_instance();
$CI->template->overall_header($this->title);
$data = array(
'error_title' => $this->title,
'error_message' => $this->message
);
if(isset($this->redirect)){
$data['redirect'] = $this->redirect;
}
$CI->load->view('error_body', $data);
}
}
为什么我会在message()方法上得到错误,而在title方法上没有得到错误?要求您将
return $this;
在可链接方法的末尾
为什么我会在message()方法上得到错误,而不是在标题上
方法
因为您的第一个链式调用返回
snull
或非对象:
虽然定义是:
function title($title){
$this->title = $title;
} // return value not specified, so it returns null
如何修复它?试试以下方法:
function title($title){
$this->title = $title;
return $this;
}
等等。我希望你能明白。要求你
return $this;
在可链接方法的末尾
为什么我会在message()方法上得到错误,而不是在标题上
方法
因为您的第一个链式调用返回
snull
或非对象:
虽然定义是:
function title($title){
$this->title = $title;
} // return value not specified, so it returns null
如何修复它?试试以下方法:
function title($title){
$this->title = $title;
return $this;
}
等等。我希望您能理解。除了必须在可链接的方法末尾输入
return$this
之外,下面这一行还有点奇怪
$this->error->title("Error Title")->message("This is an error message")->redirect('home')->display();
由于您使用的是$this
,这意味着$this->error
应该是您的属性之一。但是,您的类中没有名为$error
的属性。PHP并不真正关心这一点,但is真正关心的是$this->error
必须是error
类的实例,才能使任何类方法工作
我怀疑您收到该错误消息的最初原因是因为您没有处理类的实例。但是,即使修复了这个问题,您仍然必须使您的方法具有可链接性,以防止更多相同的消息
在此上下文中,您可以使用$this->title(“错误标题”)->message(“这是错误消息”)
此外,从设计的角度来看,使用var
关键字是将属性公开
,这将使它们在任何范围内都是可变的。这可能是您的意图,这是绝对正确的,但是,如果您的方法将执行一些额外的处理,而将它们保留为public
,则不会强制使用您的方法来正确设置这些属性。此外,您必须在可链接的方法末尾输入return$This
,下面这句话也有点奇怪
$this->error->title("Error Title")->message("This is an error message")->redirect('home')->display();
由于您使用的是$this
,这意味着$this->error
应该是您的属性之一。但是,您的类中没有名为$error
的属性。PHP并不真正关心这一点,但is真正关心的是$this->error
必须是error
类的实例,才能使任何类方法工作
我怀疑您收到该错误消息的最初原因是因为您没有处理类的实例。但是,即使修复了这个问题,您仍然必须使您的方法具有可链接性,以防止更多相同的消息
在此上下文中,您可以使用$this->title(“错误标题”)->message(“这是错误消息”)
此外,从设计的角度来看,使用var
关键字是将属性公开
,这将使它们在任何范围内都是可变的。这可能是您的意图,这是绝对正确的,但是如果您的方法将执行一些额外的处理,而将它们保留为public
,则不会强制使用您的方法来正确设置这些属性