文件引用
在之前的例子中,我们都是写在一个PHP文件中的,对于逻辑非常小的功能,你可以写在一个php文件里,那么如果逻辑功能特别多,你要是再写一个php文件里,不说老板,连你自己都会疯掉的![奸笑]下面,我们来讲文件引用,你可以按照不同的功能模块写在不同的文件里,并在主文件里引用。假如,你家庭很富有,有一车汽车和一车自行车,你先骑自行车,一会累了,想开汽车,你可能会这样写:
<?php
interface Tool{
public function doDrive();
}
class Car implements Tool{
public function doDrive(){
echo "我要开汽车了".PHP_EOL;
}
}
class Bike implements Tool{
public function doDrive(){
echo "我要骑自行车了".PHP_EOL;
}
}
class Me{
public function meDo(Tool $tool){
$tool->doDrive();
}
}
$car = new Car();
$bike = new Bike();
$me = new Me();
$me->meDo($car);
$me->meDo($bike);
?>
以下代码当然能正常运行,输出如下:
我要开汽车了
我要骑自行车了
但是,这样看着好乱啊,一个php文件里写了太多的类以及逻辑文件了,现在让我们创建两个文件夹,一个叫car文件夹,里面放一个car.class.php;另外一个叫bike文件夹,里面放一个bike.class.php;最外面有一个me.php文件和一个tool.inter.php,那么这个文件如何来使用car.class.php和bike.class.php文件呢?这里有四个引入语句,其实也可以说是两个引入语句:include和include_once,requrire和require_once。下面是我们整理的文件夹结构:
me.php:
<?php
define ('APP_ROOT',getcwd());
include APP_ROOT."./tool.inter.php";
include APP_ROOT."/car/car.class.php";
include APP_ROOT."/bike/bike.class.php";
use \tool\Tool as Tool;
use \car\Car as Car;
use \bike\Bike as Bike;
class Me{
public function meDo(Tool $tool){
$tool->doDrive();
}
}
$car = new Car();
$bike = new Bike();
$me = new Me();
$me->meDo($car);
$me->meDo($bike);
?>
too.inter.php:
<?php
namespace tool;
interface Tool{
public function doDrive();
}
?>
bike.class.php:
<?php
namespace bike;
use \tool\Tool as Tool;
class Bike implements Tool{
public function doDrive(){
echo "我要骑自行车了".PHP_EOL;
}
}
?>
car.class.php:
<?php
namespace car;
use \tool\Tool as Tool;
class Car implements Tool{
public function doDrive(){
echo "我要开汽车了".PHP_EOL;
}
}
?>
注:以上主要用到了我们之前学到的命名空间namespace,常量的定义,以及这节课要讲的文件名含include,其中有一个新的系统函数getcwd()用来获取当前运行文件的路径。
我们上面的代码逻辑可以简单地理解为按照汽车和自行车两个功能模块分别把不同的功能放到了不同的目录文件夹下,在对于项目很大的情况下一定要分模块,分文件,这样哪个模块有问题,我们可以直接去改,而且目录结构一目了然!include可以命名用require替换,两者的区别时,如果引入的路径下的文件不存在,include会触发一个警告,并继续执行下去,而require会直接崩溃掉,不能继续运行;include_once相当于文件只引用一次,再次碰到include_once引用同样的文件,则不会执行;include你引用多少次,就引入多少次,这里的引用相当于把文件中的代码复制一份到引用的位置;require_once和require一样!
警告:这里的文件引用和模块划分大家一定要理解并记住,因为一个好的工程师需要如何分模块来整理!
如若转载,请注明出处:https://www.hanjifoods.com/11718.html