欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

子类调用父类中的方法可以阻止子类的后续程序执行吗?

程序员文章站 2022-05-22 10:59:39
...
这个疑惑起因于Tp中的ajaxReturn方法,我在别的框架中也想借鉴一下这样的方式,但是不才,遇到了一些问题
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;
*/

用过tp的同学都知道,$this->ajaxReturn前面并不需要加return,而我这段代码想要返回A类中的num值,必须要在A类调用B类的return_num方法前面加上return,请问TP是如何做到的,子类中调用父类中的方法获得数据并停止子类后续代码的执行?

回复内容:

这个疑惑起因于Tp中的ajaxReturn方法,我在别的框架中也想借鉴一下这样的方式,但是不才,遇到了一些问题

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;
*/

用过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的源码就知道了。

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

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;

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

相关标签: thinkphp php