您现在的位置是:网站首页>>PHP>>php
php基础知识回顾 —— 常量
发布时间:2019-01-23 17:23:08作者:wangjian浏览量:489点赞量:0
在PHP中有这样一类变量,当变量值被定义之后,它的值就不可更改,这类变量我们称之为常量,常量分为我们自己定义的常量(常量)以及PHP自己预定义常量(魔术常量)两类
一:常量
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用
在PHP中我们使用define()来定义常量,在php5.3之后,我们可以使用const关键字在类定义的外部定义常量
定义常量
define()定义常量基本语法define ( string $name , mixed $value [, bool $case_insensitive = false ] )
参数说明:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
例:<?php
// 区分大小写的常量名
define("TEST", "测试常量");
echo TEST; // 输出 "测试常量"
const定义常量<?php
const TEST = '测试常量';
echo '测试常量';
const和define的区别:
1:使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
2:const用于类成员变量的定义,一经定义,不可修改。define不可以用于类成员变量的定义,可用于全局常量。
3:const可在类中使用,define不能
4:const不能再条件语句中定义常量
常量在定义后,默认是全局变量,可以在整个运行的php脚本的任何地方使用
二:魔术常量
php有八个魔术常量,分别为:__LINE__,__FILE__,__DIR__,__FUNCTION__,__CLASS__,__TRAIT__,__METHOD__,__NAMESPACE__
1:__LINE__(返回文件中当前的行号)
2:__FILE__(文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名)
3:__DIR__(文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录,等价于dirname(__FILE__))
4:__FUNCTION__(返回该函数被定义时的名字)
5:__CLASS__(返回该类被定义时的名字)
6:__TRAIT__:
自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits
例:
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
7:__METHOD__(返回该方法被定义时的名字)
8:__NAMESPACE__(返回当前命名空间的名称)
下面对于__TRAIT__进行额外说明
当有多个trait时,通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中
例:<?php
trait Hello {
public function sayHello() {
echo 'Hello ';
}
}
trait World {
public function sayWorld() {
echo 'World';
}
}
class MyHelloWorld {
use Hello, World;
public function sayExclamationMark() {
echo '!';
}
}
$o = new MyHelloWorld();
$o->sayHello();
$o->sayWorld();
$o->sayExclamationMark();
根据上面的魔术方法,可以获取当前脚本的文件名称substr(__FILE__,strlen(__DIR__)-strlen(__FILE__)+1)
0
+1