关于操作php文件载入顺序时会出现的bug以及载入顺序问题

一个文件夹中有两个文件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();
?>

结果为
在这里插入图片描述
说明如果是继承,那么一定要求父类的代码在子类代码的上面位置,而不能是下面位置

猜你喜欢

转载自blog.csdn.net/qq_37171379/article/details/88343187
今日推荐