魔术变量
| 魔术常量 | 作用 | 
|---|---|
| LINE | 文件当前行号 | 
| FILE | 文件完整路径和文件名 | 
| DIR | 文件所在的目录 | 
| FUNCTION | 所在函数名称 | 
| CLASS | 所在类的名称 | 
| TRAIT | trait的名字 | 
| METHOD | 所在方法 | 
| NAMESPACE | 所在命名空间的名称 | 
命名空间
namespace定义命名空间必须是在第一行,即命名空间必须在其他所有代码之前
<?php //这里必须是第一行
namespace myTest;
?>
  以下列方式命名多个命名空间
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>
  在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。
declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码
namespace MyProject;
  面向对象
<?php
abstract class fruits{
    const ft="水果";//定义常量
    protected $name;
    public static $amount;//定义静态变量
    abstract protected function buying();//定义抽象方法
    function __construct(){
        self::$amount=6;//静态变量内部调用方法
    }//定义构造方法
    function eaten(){
        self::$amount++;
        echo self::$amount."<br>";
    }//定义方法
    function __destruct(){
        echo "fruits被销毁"."<br>";
    }//定义析构函数
}
final class apple extends fruits{//定义了final的类不能被别的类继承
    function __construct(){
        self::$amount=6;//静态变量内部调用方法
    }//定义构造方法
    protected function buying(){
        return "I buy an apple";//抽象方法实例化的访问控制应该和父类的定义是一样的
        //像父类用protected,这里也需要用protected
    }
    function eaten(){
        parent::eaten();//调用父类的方法
        echo "我吃了一个苹果"."<br>";
    }
}
$apple=new apple();
echo $apple::$amount."<br>";
echo apple::$amount."<br>";//成员变量和常量可以用类名访问,也可以用对象访问
echo $apple::ft."<br>";
echo apple::ft."<br>";//常量调用不需要使用$
echo $apple->eaten();//调用成员方法
//当对象结束其生命周期的时候,自动调用析构函数
?>
  
京公网安备 11010502036488号