const数据语法结构 define属于函数
const的使用
语法:const 常量标识符 = 常量值
;
const关键字一般在类的声明里定义常量时使用;PHP5.3以后,可以使用const关键字在类定义的外部定义常亮
const定义的常量默认为大小写敏感,通常常量标识符总是大写的。开发中尽量使用大写
<?php
const TEST ='test'; //等同于 define('TEST','test');
class test{
const NAME = '李四';
const name ='张三';
public function d(){
echo self::NAME,"<br/>"; //name属性
echo self::name,"<br/>"; //区分大小写
echo TEST,"<br/>";
}
}
$t= new test();
$t->d();
echo test::NAME; //外部访问类常量
const与definde的区别
const一般用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,一般用于定义全局常量。
const不能在条件语句中定义常量。
const采用一个普通的常量名称,define可以采用表达式作为名称。
const只能接受静态的标量,而define可以采用任何表达式。
const定义的常量时大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感
<?php
const TEST1 ='test1'; //等同于 define('TEST','test');
define('TEST','test');
class test{
// define('T1',1); //类的内部不能使用define定义常量
public function tt()
{
echo TEST1,"<br/>";
echo TEST,"<br/>";
}
}
$t = new test();
$t->tt();
$i=10;
if($i<15){
define('AGE',12);
// const CAGE =12;
//const声明的常量不能出现在逻辑语句中
}
echo AGE,"<br/>";
//echo CAGE,"<br/>";
$n = "tt".rand(1111,9999);
define($n,19); //define可以用表达式$n
echo constant($n);
//const $n =100; //const 是不能使用表达式最为常量名称
echo "<br/>";
const TT = 2+"2"; echo TT,"<br/>";
//在PHP 老版本是不支持 const值是表达式的 PHP7是可以支持的
define('DD',100+1,true); echo DD,"<br/>\n",dd; //define第三个值为true的时候对大小写不敏感
traits
PHP是支持单继承的
。在开发这种,经常会碰见一个问题,就是这个类的方法或者属性在其他类里经常用到。但如果每个类都声明了这个属性或方法、会造成不需要的代码沉余、类也变得不是单一职责了。自PHP5.4.0起PHP实现了代码复用的一个方法,称为traits
。
代码案例
<?php
trait tDebug {
//定义一个打印这个类的方法
public function dumpObject() {
$class = get_class($this);
$attributes = get_object_vars($this);
$methods = get_class_methods($this);
echo "<h2> $class 对象的信息</h2>";
echo '<h3>属性</h3><ul>';
foreach ($attributes as $k => $v) {
echo "<li>$k: $v</li>";
}
echo '</ul>';
echo '<h3>方法</h3><ul>';
foreach ($methods as $v) {
echo "<li>$v</li>";
}
echo '</ul>';
}
//如果引用trait的类,的方法和trait类方法相同、trait的会被覆盖
function setSize($w = 0, $h = 0) {
echo "宽$w","高$h";
}
function trait_setSize($w = 0, $h = 0) {
echo "宽$w","高$h";
}
}
//定义一个矩形类
class Rectangle {
use tDebug;
public $width = 0;
public $height = 0;
function __construct($w = 0, $h = 0) {
$this->width = $w;
$this->height = $h;
}
function setSize($w = 0, $h = 0) {
$this->width = $w;
$this->height = $h;
}
function getArea() {
return ($this->width * $this->height);
}
function getPerimeter() {
return ( ($this->width + $this->height) * 2 );
}
function isSquare() {
if ($this->width == $this->height) {
return true;
} else {
return false;
}
}
}
$r = new Rectangle(42, 37);
$r->dumpObject();