再探面向对象

类的定义

每个类的定义都以关键字 class 开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义
一个类可以包含有属于自己的常量,变量(属性)以及函数(方法)
当一个方法或属性在类定义内部被调用时,有一个可用的伪变量 $this
面向对象的基本原则:高内聚,低耦合

class SimpleClass {
   
    //声明属性
    public $var = 'var is a default value';

    //声明方法
    public function displayVar()
    {
   
        echo $this->var;
    }
}
类的实例化

要创建一个类的实例,必须使用 new 关键字。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。类应在被实例化之前定义(某些情况下则必须这样)。
如果在 new 之后跟着的是一个包含有类名的字符串 string,则该类的一个实例被创建。如果该类属于一个命名空间,则必须使用其完整名称
在类定义内部,可以用 new self 和 new parent 创建新对象
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。
可以用克隆给一个已创建的对象建立一个新实例
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例,instanceof 也可用来确定一个变量是不是继承自某一父类的子类的实例

$instance = new SimpleClass();

class GrandParent{
   }

class ParentClass extends GrandParent{
   }

class MyClass extends ParentClass{
   }

$a = new MyClass;

var_dump($a instanceof MyClass);//true
var_dump($a instanceof ParentClass);//true
var_dump($a instanceof GrandParent);//true

继承

一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类
被继承的方法和属性可以通过用同样的名字重新声明被覆盖。但是如果父类定义方法时使用了 final,则该方法不可被覆盖。可以通过 parent:: 来访问被覆盖的方法或属性
当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT 级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数

::class

自 PHP 5.5 起,关键词 class 也可用于类名的解析。使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称。这对使用了 命名空间 的类尤其有用

namespace app;

class SimpleClass {
   }
echo SimpleClass::class;//打印出 app\SimpleClass
属性

类的变量成员叫做属性,属性声明是由关键字 public,protected 或者 private 开头,然后跟一个普通的变量声明来组成,属性中的变量可以初始化,但是初始化的值必须是常数
在类的成员方法里面,可以用 ->(对象运算符): t h i s − > p r o p e r t y ( 其 中 p r o p e r t y 是 该 属

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值