這個疑惑起因於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
你看看是不是你要的效果