首頁  >  文章  >  後端開發  >  子類別呼叫父類別中的方法可以阻止子類別的後續程式執行嗎?

子類別呼叫父類別中的方法可以阻止子類別的後續程式執行嗎?

WBOY
WBOY原創
2016-08-04 09:20:01932瀏覽

這個疑惑起因於Tp中的ajaxReturn方法,我在別的框架中也想藉鑑一下這樣的方式,但是不才,遇到了一些問題

<code>class A {
    public $num = 2;
    public function return_num() {
        return $this->num;
    }
}

class B extends A{
    public function return_A_mum() {
        $this->return_num();
        echo 222;    //这里不让他运行
    }
}

$B = new B();
$a = $B->return_A_mum();
echo $a;
/*
这里输出$a是222;
*/
</code>

用過tp的同學都知道,$this->ajaxReturn前面並不需要加return,而我這段程式碼想要回傳A類中的num值,必須在A類別呼叫B類別的return_num方法前面加上return,請問TP是如何做到的,子類別中呼叫父類別中的方法取得資料並停止子類別後續程式碼的執行?

回覆內容:

這個疑惑起因於Tp中的ajaxReturn方法,我在別的框架中也想藉鑑一下這樣的方式,但是不才,遇到了一些問題

<code>class A {
    public $num = 2;
    public function return_num() {
        return $this->num;
    }
}

class B extends A{
    public function return_A_mum() {
        $this->return_num();
        echo 222;    //这里不让他运行
    }
}

$B = new B();
$a = $B->return_A_mum();
echo $a;
/*
这里输出$a是222;
*/
</code>

用過tp的同學都知道,$this->ajaxReturn前面並不需要加return,而我這段程式碼想要回傳A類中的num值,必須在A類別呼叫B類別的return_num方法前面加上return,請問TP是如何做到的,子類別中呼叫父類別中的方法取得資料並停止子類別後續程式碼的執行?

因為你呼叫的方法裡面有exit,die之類的方法唄...
一些特定的輸出有格式要求,所以此類方法往往內建了exit,例如json, xml等,最常見的就是url跳轉了,使用header函數發送跳轉指令後必須exit,否則後面又輸出一大堆。
貌似Yii這個很有個性的框架就有 $controller->redirect()和$controller->redirectAndExit()兩個方法,不知道的人調用了前者就會死很慘。
而你這個就是,返回json,如果不退掉很可能json後面就會增加了額外字符,造成數據格式非法。

這種問題看下thinkphp的源碼就知道了。

<code class="php">protected function ajaxReturn($data) {
     // 返回JSON数据格式到客户端 包含状态信息
     header('Content-Type:application/json; charset=utf-8');
      exit(json_encode($data));
}</code>

<code>class A
{
    public $num = 2;

    public function return_num()
    {
        return $this->num;
    }
}

class B extends A
{
    public function return_A_mum(&$data)
    {
        $data = $this->return_num();
    }
}

$B = new B();
$B->return_A_mum($a);
echo $a;</code>

輸出2
你看看是不是你要的效果

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn