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()方法上得到错误,而不是在标题上 方法

因为您的第一个链式调用
返回
s
null
或非对象:

虽然定义是:

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()方法上得到错误,而不是在标题上 方法

因为您的第一个链式调用
返回
s
null
或非对象:

虽然定义是:

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
,则不会强制使用您的方法来正确设置这些属性