PHP学习(二)
魔术变量
魔术常量 | 作用 |
---|---|
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();//调用成员方法
//当对象结束其生命周期的时候,自动调用析构函数
?>