include 및 include_once
require 및 require_once
상수
파일과 상수 조합 사례 소개
가변 연산 기능
출력문
이전 기사에서 애플리케이션에 대해 논의했습니다. 함수의 작성은 하나의 파일에서만 이루어집니다. 다른 파일에서 함수를 호출하려는 경우 이전 섹션의 내용을 구현할 수 없지만 PHP 언어에서는 소개 개념을 제공합니다. 이 문제를 완벽하게 해결해 보세요.
a.php 파일과 같은 파일이 b.php 파일의 기능을 사용하려면 b 파일을 넣어야 합니다. in 이 함수는 a 파일에 도입됩니다. PHP에서는 목표를 달성하기 위한 네 가지 방법, 즉 include, include_once, require, require_once를 제공합니다.
총 4가지 방법이 있지만 소개 방법은 각각 다릅니다.
이름에서 알 수 있듯이 이 두 가져오기에는 모두 include가 있습니다. 오류(가져온 모든 파일이 올바른지 보장할 수 없기 때문에)는 프로그램을 종료하지 않지만 계속 실행됩니다.
<?php include 'a.php'; echo '上面引入的文件出错了';
결과:
include
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로 가져온 파일에 오류가 있으면 프로그램이 즉시 중지됩니다.
파일을 가져온 경우 반복적으로 가져옵니다.
첫 번째 기능은 위에서 설명했고, 두 번째 기능은, 코드에서 동일한 파일을 도입하기 위해 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 '引入一次文件。'; .....结果...... 引入一次文件。
위 코드에서는 오류를 보고하지 않는 것을 볼 수 있습니다.
시스템에서는 4가지 방법을 제공하는데, 어떤 소개 방법을 선택해야 할지 어떻게 알 수 있나요?
특정 파일을 도입하는 경우(예: 데이터베이스 연결 획득, 파일 열기 등. 파일 도입에는 _once를 사용하는 것이 좋습니다) 리소스 낭비를 방지합니다. 우리는 개발 중에 require와 require_once를 자주 사용합니다.
require_once를 사용하는 것이 더 좋습니다. 이 방법을 사용하면 리소스를 절약하고 반복 정의로 인해 발생하는 오류를 피할 수 있기 때문입니다.
파일 도입에 대한 심층적 이해: PHP에서는 다른 파일이 파일에 도입되면 가져온 파일이 실행될 수 있습니다. 가져온 파일에 값을 반환하지 않으면 파일이 끝날 때까지 반환할 수 없습니다.
<?php echo '这是引入的文件<br>'; require_once 'b.php'; //引入b文件 echo '当执行完引入的文件后执行这句话<br>'; b.php文件 <?php echo '这是另外一个文件<br>'; return; ......结果...... 这是引入的文件 这是另外一个文件 当执行完引入的文件后执行这句话
위 코드를 잘 살펴보면 가져온 파일에 return 종료 문을 사용하고 메인 파일의 종료를 종료하지 않는 것을 알 수 있습니다. 동일한 메모리에서 실행되더라도 해당 작업에는 영향을 미치지 않습니다.
요약하면 반품 문제는 3가지입니다.
在我们引入一个文件时,在默认的情况下,成功返回1
我们也可以根据实际情况返回数据,比如一个数组。
在引入文件过程中,当遇到被引入文件的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
从上面的代码可以看出常量的定义和变量使不一样的,它们两个是有区别的。
常量和变量的区别:
常量前面没有美元符号($);
常量只能用 define() 函数定义,而不能通过赋值语句;
常量可以不用理会变量的作用域而在任何地方定义和访问;
常量一旦定义就不能被重新定义或者取消定义;
常量的值只能是标量。
常量的名字一般都是大写。
处理我们自己定义的常量外,PHP系统还给我们定义了一些常量,比如我们在讲整型的时候用到的PHP_INT_MAX,获取整型的最大值。
PHP语言可以说有一个特色,它的语法中有魔术这个概念。在系统常量中就有魔术这个概念,PHP称之为魔术常量,那什么是魔术常量?
魔术常量:PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。(一大堆看不懂的话-_-);
简单的来说就是系统总共提供了八个魔术常量,它们的值随着它们在代码中的位置改变而改变。例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写。
PHP的魔术常量:
__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起, __FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
示例:
<?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/…,这种格式就可以理解为绝对路径。
在这里我们来对引入文件和魔术常量进行一个综合应用:
在上面使我们在开发中可能用到的文件夹,今天我们只是简单的进行使用,就是后面的流程
在lib文件夹下有一些f函数文件,里面有我们使用的函数,我们可以定义为function.php
在lib的init.php中使用魔术常量来定义一些常量,用来表示文件的绝对路径,就算你把项目的路径换了,也是可以的,同时在init.php中引入函数库
在index.php中引入init.php文件。
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下的函数文件里面的函数。
上面的就是引入文件和魔术常量的最基本的用法。
通过上面的介绍,算是基本介绍完了函数的使用和常量的使用,学完函数,我们在来回顾回顾以前不知道的。
isset() : 检测变量是否设置,未定义或值为null时返回假
unset() : 销毁指定的变量。你可以在函数中传入变量进行销毁。
empty() : 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE ,那么它会被认为不存在。
is_int() : is系列有很多函数,用来判断变量的类型,如is_int,当变量是整型类型的,返回true,否则返回false。
echo 实际上不是一个函数,是PHP语句,所以后面可以不适用括号,当你想用echo输出多个值得时候,可以用逗号隔开。echo并没有返回值。
print 和echo用法一样,但是echo的速度要比print的速度快,print也不是一个函数,它是有返回值得,总是返回1.
print_r(变量)打印关于变量的易于理解的信息。如果变量是string,integer,float将会直接输出其值,如果变量是一个数组,则会输出一个格式化后的数组。
printf函数返回一个格式化后的字符串,它的语法是
printf(format,arg1,arg2)
var_dump()一般我们是输出变量的内容,类型和字符串的内容,类型,长度,从而我们可以看到变量的类型是什么。
通过这两节的讲解,函数和常量的知识算是说完了,函数的调用过程和操作在以后开发中我们一定要了然于胸。
以上就是PHP基础教程六之函数、常量的内容,更多相关内容请关注PHP中文网(www.php.cn)!