文章17 | 阅读 8312 | 点赞0
在上篇文章中,我们讨论了函数的应用,但是只是在一个文件中进行函数的调用,当我们想在不同的文件中进行函数的调用时,上节的内容就不能够实现,但是PHP语言提供了引入的概念。让这个问题得到了完美的解决。
如果某个文件,比如a.php 文件,要使用 b.php 文件的函数,这是就需要我们把b文件中的函数引入到a文件中。PHP位我们提供了四种方式来达到目的, 分别是 include , include_once, require , require_once 。
虽然总共有四种方式,但是每个的引入方式不一样。
从名字可以看到,这两个引入都有include,他们两个共同的特点就是当引入的文件出错的时候(因为你不能保证每个引入的文件都是正确的)不会终止程序,而是会接着执行下去的。
<?php
include 'a.php';
echo '上面引入的文件出错了';
结果:
include
include,一种引入文件的形式,它有两个特点:
第一个特点上面已经论述过,第二个特点,当在代码中重复的使用include引入同一个文件,它会重复的引入。
<?php
/**
* a.php文件的内容,一个求和的函数
*/
function sum($a,$b){
return $a + $b;
}
//func.php文件的内容
<?php
include 'a.php';
include 'a.php';
echo '重复的引入文件';
结果:
在上面可以看到在此时用include它会报错,意思是说你之前已经引入了文件,不能再次引入。
include_once
include_once它和include很像,除了引入出错会继续执行外,还有一个是当文件已经引入后,它不会再次引入。
<?php
include_once 'a.php';
include_once 'a.php';
echo '引入一次文件。';
.....结果......
引入一次文件。
可以看到上面的代码并没有报错。
require和require_once是另外一种文件引入的方式。他们共有的特点是:
当引入的文件出错的时候,就会终止程序,不在向下执行。
<?php
require 'b.php';
echo '这句话不会执行';
结果:
require
require,一种引入文件的形式,它有两个特点:
第一个特点上面已经论述过,第二个特点,当在代码中重复的使用require引入同一个文件,它会重复的引入。
<?php
/**
* a.php文件的内容,一个求和的函数
*/
function sum($a,$b){
return $a + $b;
}
//func.php文件的内容
<?php
require 'a.php';
require 'a.php';
echo '引入一次文件。';
结果:
在上面可以看到在此时用require它会报错,意思是说你之前已经引入了文件,不能再次引入。
require_once
require_once它和require很像,除了引入出错会终止程序外,还有一个是当文件已经引入后,它不会再次引入。
<?php
require_once 'a.php';
require_once 'a.php';
echo '引入一次文件。';
.....结果......
引入一次文件。
可以看到上面的代码并没有报错。
系统为我们提供了四种方式,但我们怎么知道选择什么样的引入方式呢?
如果我们在引入某些文件(比如获取数据库连接,打开文件等。建议使用_once这种方式来引入文件),防止资源浪费。而我们在开发中经常使用require和require_once这种方式。
更推荐使用require_once这种方式。因为使用这种方式可以节省资源,同时可以避免重复定义出现的错误。
文件引入的深入了解:在PHP中当在一个文件中引入另外一个文件的时候,就会去执行引入的文件,我们在引入的文件中可以返回一个值,也可以不返回,直到文件结束。
<?php
echo '这是引入的文件<br>';
require_once 'b.php'; //引入b文件
echo '当执行完引入的文件后执行这句话<br>';
b.php文件
<?php
echo '这是另外一个文件<br>';
return;
......结果......
这是引入的文件
这是另外一个文件
当执行完引入的文件后执行这句话
仔细看到上面的代码,可以看到在引入的文件中使用return终止语句,并没有终止主文件的终止。它们虽然在同一个内存中运行,但是不影响各自的运行。
关于return的问题总结起来总共有三点:
在我们的开发过程中,往往需要一些全局性的值,就是已经确定并且我们在以后不会修改他们,比如说网站的根目录路径,这时候我们已经不能够使用变量,因为变量我们是可以修改的。在这里就介绍PHP中另外一种常量;
常量:常量可以理解成是一种特殊的变量,一旦被定义,就不能再改变或者取消定义[即: 不能unset常量].
那我们用什么来定义常量呢?PHP中提供了两种方法来定义常量。
define(string $name ,常量的值);定义一个常量
第一个参数就是我们的常量名。
第二个参数是常量的值;仅允许标量和 null 。标量的类型是 integer , float , string 或者 boolean 。 也能够定义常量值的类型为 resource ,但并不推荐这么做,可能会导致未知状况的发生。
const 在 PHP 5.3.0 以后,可以使用 const 关键字在类定义之外定义常量。
我们在定义常量的时候,这两个都可以使用。
<?php
define('PI',3.1415926);
echo PI . '<br>';
const TAX = 0.012;
echo TAX;
......结果......
3.1415926
0.012
从上面的代码可以看出常量的定义和变量使不一样的,它们两个是有区别的。
常量和变量的区别:
处理我们自己定义的常量外,PHP系统还给我们定义了一些常量,比如我们在讲整型的时候用到的PHP_INT_MAX,获取整型的最大值。
PHP语言可以说有一个特色,它的语法中有魔术这个概念。在系统常量中就有魔术这个概念,PHP称之为魔术常量,那什么是魔术常量?
魔术常量:PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。(一大堆看不懂的话-_-);
简单的来说就是系统总共提供了八个魔术常量,它们的值随着它们在代码中的位置改变而改变。例如 LINE 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写。
PHP的魔术常量:
示例:
<?php
define('PI',3.1415926);
echo PI . '<br>';
const TAX = 0.012;
echo TAX . '<br>';
echo __DIR__; //使用魔术常量来获取当前文件所在的绝对路径。
......结果......
3.1415926
0.012
D:\mywamp\Apache24\htdocs\zendstudio\yunsuanfu
可以看到在使用__DIR__这个魔术常量的时候,在运行后,自动获取文件当前的绝对路径。
上面的内容就是常量的使用,当然还是多练。当我们在开发中怎么利用魔术常量和文件引入开发呢?
在开发中我们在引入文件的时候,文件的路径是一个关键,我们有两种选择,一种是相对路径,一种是绝对路径。开发中我们往往选择是绝对路径,也就是文件所在的路径比如c:/mywamp/apache24/…,这种格式就可以理解为绝对路径。
在这里我们来对引入文件和魔术常量进行一个综合应用:
在上面使我们在开发中可能用到的文件夹,今天我们只是简单的进行使用,就是后面的流程
function.php:
<?php
function getSum($a,$b){ //计算两个数的和
return $a + $b;
}
function getSub($a,$b){ //计算两个数的差
return $a - $b;
}
init.php
<?php
//定义项目的根目录
define('WEB_ROOT_PATH',dirname(__DIR__) . '/');
//定义css的路径
define("CSS_PATH",WEB_ROOT_PATH . 'css/');
//定义js的路径
define('JS_PATH',WEB_ROOT_PATH . 'js/');
//定义图片的路径
define('IMAGE_PATH',WEB_ROOT_PATH . 'image/');
//定义存放模板的路径
define('TEMPLATE_PATH',WEB_ROOT_PATH . 'template/');
//定义lib的路径
define('LIB_PATH',WEB_ROOT_PATH . 'lib/');
//定义model的路径
define('MODEL_PATH',WEB_ROOT_PATH . 'model/');
//我们使用lib的绝对路径来引入function.php文件
require LIB_PATH . 'function.php';
在init中我们使用魔术常量__DIR__来动态的获取文件的所在目录,然后通过dirname()(说明给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名),得到项目的根目录,然后根据根目录得到各个文件夹的绝对路径,在最后通过绝对路径引入函数文件。
index.php
<?php
require_once './lib/init.php'; //这里通过相对路径来获取初始化文件
//上面的表示已经引入了初始化文件,而我们在初始化中又引入了函数文件,所以可以在这里直接用函数文件里面的函数。
$sum = getSum(10,23);
$sub = getSub(10,5);
echo $sum;
echo '<br>';
echo $sub;
......结果......
33
5
可以看到在index.php文件中可以正常的使用lib下的函数文件里面的函数。
上面的就是引入文件和魔术常量的最基本的用法。
通过上面的介绍,算是基本介绍完了函数的使用和常量的使用,学完函数,我们在来回顾回顾以前不知道的。
echo 实际上不是一个函数,是PHP语句,所以后面可以不适用括号,当你想用echo输出多个值得时候,可以用逗号隔开。echo并没有返回值。
print 和echo用法一样,但是echo的速度要比print的速度快,print也不是一个函数,它是有返回值得,总是返回1.
print_r(变量)打印关于变量的易于理解的信息。如果变量是string,integer,float将会直接输出其值,如果变量是一个数组,则会输出一个格式化后的数组。
printf函数返回一个格式化后的字符串,它的语法是
printf(format,arg1,arg2)
var_dump()一般我们是输出变量的内容,类型和字符串的内容,类型,长度,从而我们可以看到变量的类型是什么。
通过这两节的讲解,函数和常量的知识算是说完了,函数的调用过程和操作在以后开发中我们一定要了然于胸。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/li741350149/article/details/52668016
内容来源于网络,如有侵权,请联系作者删除!