php基础
PHP类型:
标量:boolean integer float string
复合:array object callable
特殊:resource null
预定义变量:
超全局变量:
$GLOBALS:引用全局作用域中可用的全部变量
$_SERVER:服务器和执行环境信息
$_SERVER['SERVER_ADDR']:服务器ip地址
$_SERVER['SERVER_NAME']:服务器主机名
$_SERVER['SERVER_SOFTWARE']:服务器标识字符串
$_SERVER['SERVER_PROTOCOL']:请求页面时通信协议的名称及版本
$_SERVER['REMOTE_ADDR']:浏览当前页面用户ip地址
$_SERVER['REMOTE_HOST']:浏览当前页面用户主机名
$_GET
$_POST
$_FILE
$_COOKIE
$_SESSION
$_REQUEST:$_GET、$_POST、$_COOKIE
$_ENV:环境变量
$php_errormsg:前一个错误信息
常量:
常量只包含标量数据
常量不可取消或重新定义
常量可在任何地方定义和访问
常量相关函数:
define()|const:定义常量
constant():获取常量的值
get_defined_constants():获取常量列表
defined():判断是否定义该常量
预定义常量:
E_ERROR
E_WARNING
..
TRUE
FALSE
NULL
魔术常量:
__LINE__:当前行号
__FILE__:文件完整路径和文件名
__DIR__:文件所在的目录
__FUNCTION__:函数名称
__CLASS__:类的名称
__TRAIT__:Trait 的名字
__METHOD__:类的方法名
__NAMESPACE__:当前命名空间的名称
类与对象
属性
类常量 const NAME='apple';
类自动加载
spl_autoload_register() 注册任意数量的自动加载器
spl_autoload_register(function ($class_name) {
require_once $class_name . '.php';
});
构造函数和析构函数
__construct():构造函数
__destruct():析构函数
访问控制:public private protected
对象继承:extends
范围解析符: ::用于访问静态成员、类常量、覆盖类中的属性和方法
static:静态关键字 不可用->操作符访问 必需用::访问
抽象类:abstract
抽象类不能被实例化
类中有一个方法被声明为抽象的就必须声明为抽象类
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法
方法的访问控制必须和父类中一样(或者更为宽松)
方法的调用方式必须匹配,即类型和所需参数数量必须一致
强制子类定义父类中的抽象方法
抽象方法仅需要定义需要的参数
对象接口:interface(声明接口) 声明的时候接口中的方法可定义方法名和参数,函数体都为空
实现:implements 实现的时候,用类的方法实现相应接口方法中的方法
// 声明一个'iTemplate'接口
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// 实现接口
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
//没有getHtml方法的话是不对的,实现接口的类必须包含所有接口中的方法
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
继承:extends 可继承多个接口
trait:代码复用
<?php
trait ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
/* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo;
/* ... */
}
?>
魔术方法
__construct() 构造
__destruct() 析构
__call() 在对象中调用一个不可访问方法时,__call() 会被调用。
__callStatic() 在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用
__get() 读取不可访问属性的值时,__get() 会被调用
__set() 在给不可访问属性赋值时,__set() 会被调用。
__isset() 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
__unset() 当对不可访问属性调用 unset() 时,__unset() 会被调用。
__sleep()
serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。
如果存在,该方法会先被调用,然后才执行序列化操作。
此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。
如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。
__wakeup()
unserialize() 会检查是否存在一个 __wakeup() 方法。
如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。
__toString() 用于一个类被当成字符串时应怎样回应
__invoke() 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用
__set_state() 当调用 var_export() 导出类时,此静态 方法会被调用
__clone()
当复制完成时,如果定义了 __clone() 方法,
则新创建的对象(复制生成的对象)中的 __clone() 方法会被调用,
可用于修改属性的值(如果有必要的话)
__debugInfo()
final关键字:如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
对象比较:==和===
对象复制:__clone
类型约束:函数的参数可以指定必须为对象(在函数原型里面指定类的名字),接口,NULL,数组或者callable
后期静态绑定:static::who()
static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的
对象序列化:
serialize()
unserialize()
命名空间:
namespace关键字 显式访问当前命名空间或子命名空间中的元素 等价于类中的 self 操作符
__NAMESPACE__ 包含当前命名空间名称的字符串