面向对象
就是把面向过程 抽象成类 然后封装
核心思想: 对象 封装 可重用性 可扩展性 可维护
parent:: demo()
若是子类覆盖可以 调用父类中方法
final 关键字
在 类 前面加 使类为 终极类 不可被继承
在方法前加 使方法不可被子类的方法覆盖
self 关键字
调用类中的 的 静态属性 方法
static 关键字
静态属性 多个对象共享静态属性
const 常量
只读 要有初始值 不能重新赋值
类中只能使用self调用 类外 :: 静态调用方式
instanceof
判断 一个对象是类的实例 类的子类 某个接口
clone
$obj = new A;
$a = clone $obj; //使用关键字克隆(复制)对象,创建一个对象的副本,2方 互不干扰,完全独立
———clone() 魔术方法
使用clone时自动 调用 用来为新的对象赋值
魔术方法
serialize 序列化 unserialize 反序列化
类中添加此方法 序列化室自动调用
function __sleep()
{
return [‘a’,‘b’]; 返回一个数组 数组中的 a b 将被序列化 其余忽略
}
function __wakeup() 没参数 没返回值
{
$this->a=2; // 反序列化 触发 为新对象中的a 重新赋值
}
自动加载类 __autoload
function __autoload($classname){}
$obj = new A;
当 A 类不存在则自动调用autoload 魔术方法 将A当做参数传入
__toString()
当一个对象被当作字符串对待的时候,会触发这个魔术方法
__set _get
__get 类外调用类中的受保护 protected和私有属性private 时 触发
有一个参数 调用的不存在的属性名 or 访问权限不足的属性名
class Person{
public $name = '周伯通';
private $sex = '男';
function __get($name){
//这里参数 是 sex $class-> 传参
echo '个人信息:'.$name.$this->sex;
}
}
$class = new Person();
echo $class->sex;//个人信息:sex男
__set 类外 改变 类中的受保护 protected和私有属性private 时 触发
有两个参数
参1 调用的不存在的属性名 or 访问权限不足的属性名
参2 需要设置的属性值
<?php
class Person{
public $name = '周伯通';
private $sex = '男';
function __set($name, $val){
//echo '个人信息:'.$this->$name = $val;
$this->$name = $val; //注意 这里是$name,是要设置访问的变量名,如果大家用$this->name,会看到本例会输出的是 男