Php 获取子类实例
如何检查调用方法的子类以确定如何执行该方法 在Classes.php上:Php 获取子类实例,php,class,inheritance,instance,Php,Class,Inheritance,Instance,如何检查调用方法的子类以确定如何执行该方法 在Classes.php上: 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 Spec
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 {}
关于脚本:
$spec1 = new Specific_1();
$spec2 = new Specific_2();
spec1->foo() // pretend to echo bar
spec2->foo() // pretend to echo zoo
Try关键字:
试用功能:
<?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();
?>
另一种方法是: p.S.:为什么不在每个类中重写方法呢
bar
zoo
<?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();
?>
bar
baz
<?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();
?>
bar
zoo