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();
Last modification:January 6, 2020
如果觉得我的文章对你有用,请随意赞赏