对象

  1. 声明:
class classname{
    function __construct($para)
        {
        /*code block*/
    }
    function __destruct()
        {
        /*code block*/
    }
}
  1. 实例化 new
  2. 伪变量$this 和 self(两者基本一致,后者主要访问静态变量和常量)
  3. 调用方法及属性符号: ->
  4. 构造函数 __construct()
  5. 析构函数 __destruct()
  6. 方法重写 # 类里面支持函数的重载,别的地方不支持
  7. 属性或者方法的访问控制 public, protected, private (默认公有) # protected的子类能继承,private则不能继承。
  8. 继承 extends
  9. final关键字 父类中的方法被声明为final,则无法覆盖该方法; 若一个类被声明为final则无法继承
  10. php不支持多重继承 # 可以用接口实现近似的作用
  11. 接口(用于指定某个类必须实现哪些方法):接口中所有方法为空,且必须为公有; 关键字inteface; 引用时implements
interface Test{			# 定义接口
    function test_1()	
}
class Test_sub implements Test{		# 继承和实现接口
    function test_1(){
        /*code block*/
    }
}
  1. 引用接口的类必须实现接口中所定义的方法,类可以实现多个接口,中间用逗号来分隔;类的继承要在接口实现关键字之前:
class C_sub extends C_par implements I_1, I_2, I_3		# 继承一个类,实现3个接口
interface I_3 extends I_1, I_2			# 接口不能实现另一个接口,能继承多个
  1. trait # 推荐用于实现多重继承功能的方式
trait t_test{		# 特性定义
    public function ft_test($param){
        /* code block */
        }
}
class C_test{
    use t_test;	# 使用特性
    function fc_test($param){
        $this->logmessage($msg);
        }
}
  1. trait中定义的方法会重载父类中的方法,而子类中的方法会重载trait中的方法
  2. 两个trait中的同名方法可以同时调用
class C_test{
    use t1, t2{
        t1::f_test insteadof t2	# 用t1中的f_test方法代替t2中的f_test方法
        t2::f_test as private ft2_test	# 给t2中的f_test设置别名ft2_test
    }
    function fc_test($param){
        $this->f_test()		# t1中的f_test()方法
        $this->fc_test()	# t2中的f_test()方法
    }
}
  1. 抽象类 # 抽象类必须要有一个方法是抽象的, 包含有抽象方法的类也必须是抽象类,抽象类不能被实例化; 和接口的异同; 抽象类强制继承方法关键字abstract
abstract class C{   # 抽象类
    abstract function f_name_1($para);    # 抽象方法
    function f_name_2($para){
        /* code block */        # 普通方法
    }
}
  1. const关键字; 访问$class::constant_name; constant函数,返回一个常量的值

  2. 用变量来动态调用类 如$cls = new Class_name(); $cls = “Class_name” =====> 常量获取 $cls::constant_name

  3. PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。

  4. static关键字 静态方法或属性 静态属性和常量的区别(静态属性定义在内存中,一个可修改一个不可修改)

  5. parent::__construct(); 调用父类的构造方法

  6. __get(KaTeX parse error: Expected group after '_' at position 8: key) 和 _̲_set(key, $value) # 和python中魔法方法设置相同,前者访问属性,后者设置属性值

  7. instanceof: # $b instanceof B 可以判断类,接口,不适用trait

  8. 静态绑定:用static::whichclass()替代self::whichclass()时,将执行当前类的调用方法(避免继承时调用的是父类方法)

<?php
class A {
    public static function whichclass() {
        echo __CLASS__;
    }
    public static function test() {
        self::whichclass();
    }
}

class B extends A {
    public static function whichclass() {
        echo __CLASS__;
    }
}

A::test();  # 打印A
B::test();  # 打印A 若要打印B则用上述方法
?>
  1. 克隆类:$c = clone $b # clone时会触发__clone()方法,如同构造析构函数一样,不可以直接访问,但是可以触发
  2. 重载:动态创建属性和方法,即访问未定义的方法时触发__call()魔法方法,在此方法中定义想执行的操作;在静态上下文中调用不可访问的方法时触发__callStatic()魔法方法
  3. __autoload(): 7.2弃用现在用spl_autoload_register
  4. 可以用foreach来遍历类的属性
  5. 迭代器和生成器
  6. __toString()魔法方法:方法的return值作为echo实例时展示的值
  7. var_export()展示所有类属性
  8. reflection API # 反射类
<?php
require_once("xxx.php");
$class = new ReflectionClass("xxx");    
echo "<pre>".$class."</pre>"        # 利用反射类查看类信息
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值