一个文件夹中有两个文件aaa.php,bbb.php
①操作过程中遇到的一个bug
aaa.php中的代码如果是这样
header('Content-Type: text/html; charset=utf-8');
class A{
public function a(){
echo '我是小坏蛋';
}
}
$obj=new A();
那么直接就会出现
而别的类在属性中使用这个类时会自动触发这个方法一次,如果把这个方法名改成action,那么就不会触发
②aaa.php中代码如下
<?php
class A{
public function action(){
echo '我是小坏蛋';
}
}
?>
bbb.php中代码如下
<?php
header('Content-Type: text/html; charset=utf-8');
include 'aaa.php';
class B{
public $db;
public function __construct(){
$this->db=new A();
}
}
$obj=new B();
echo $obj->db->action();
结果为
如果改变载入aaa.php的位置
<?php
header('Content-Type: text/html; charset=utf-8');
class B{
public $db;
public function __construct(){
$this->db=new A();
}
}
include 'aaa.php';//改变位置
$obj=new B();
echo $obj->db->action();
?>
结果仍然为
说明一个类在使用另外一个类作为属性时,可以类似函数那样不用一定将类的代码放到前面,而是可以放到后面位置
但是如果是继承,举例 bbb.php中代码如下
<?php
header('Content-Type: text/html; charset=utf-8');
class B extends A{
}
include 'aaa.php';
$obj=new B();
echo $obj->action();
?>
结果为
如果改成
<?php
header('Content-Type: text/html; charset=utf-8');
include 'aaa.php';
class B extends A{
}
$obj=new B();
echo $obj->action();
?>
结果为
说明如果是继承,那么一定要求父类的代码在子类代码的上面位置,而不能是下面位置