首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取SubClass实例

获取SubClass实例
EN

Stack Overflow用户
提问于 2013-04-26 11:16:28
回答 1查看 348关注 0票数 0

如何检查调用某个方法的子类,以确定该方法将如何执行?

在Classes.php上:

代码语言:javascript
复制
class Generic {

public function foo() {

// if its being called by Specific_1 subclass
echo "bar";

// if its being called by Specific_2 subclass
echo "zoo";
  }
}

class Specific_1 extends Generic {}

class Specific_2 extends Generic {}

在脚本上:

代码语言:javascript
复制
$spec1 = new Specific_1();
$spec2 = new Specific_2();

spec1->foo() // pretend to echo bar
spec2->foo() // pretend to echo zoo
EN

回答 1

Stack Overflow用户

发布于 2013-04-26 11:23:10

尝试instanceof关键字:

代码语言:javascript
复制
<?php
header('Content-Type: text/plain');

class Generic {
    public function foo() {
        if($this instanceof Specific_1)echo "bar";
        if($this instanceof Specific_2)echo "zoo";
    }
}

class Specific_1 extends Generic {}
class Specific_2 extends Generic {}

$a = new Specific_1();
$a->foo();

echo PHP_EOL;

$b = new Specific_2();
$b->foo();
?>

显示:

代码语言:javascript
复制
bar
zoo

尝试is_a()函数:

代码语言:javascript
复制
<?php
header('Content-Type: text/plain');

class Generic {
    public function foo() {
        if(is_a($this, 'Specific_1'))echo "bar";
        if(is_a($this, 'Specific_2'))echo "baz";
    }
}

class Specific_1 extends Generic {}
class Specific_2 extends Generic {}

$a = new Specific_1();
$a->foo();

echo PHP_EOL;

$b = new Specific_2();
$b->foo();
?>

显示:

代码语言:javascript
复制
bar
baz

使用get_called_class()的另一种方式

代码语言:javascript
复制
<?php
header('Content-Type: text/plain');

class Generic {
    public function foo() {
        switch($class = get_called_class()){
        case 'Specific_1':
            echo "bar";
            break;

        case 'Specific_2':
            echo "zoo";
            break;

        default:
            // default behaviour...
        }
    }
}

class Specific_1 extends Generic {}
class Specific_2 extends Generic {}

$a = new Specific_1();
$a->foo();

echo PHP_EOL;

$b = new Specific_2();
$b->foo();
?>

显示:

代码语言:javascript
复制
bar
zoo

附言:为什么不直接覆盖每个类中的方法呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16228168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档