博客列表 >面向对象编程基础

面向对象编程基础

手机用户1607314868
手机用户1607314868原创
2021年02月04日 02:56:47566浏览

OOP

OOP全称object oriented progrmming 面向对象编程
和面向对象编程不同的是面向过程编程。面向过程编程是直接面向 变量 和函数 编程,没有类和封装。
oop直接面向对象编程,封装了变量和函数的一个编程单元。be本质是封装,目标是代码复用

类 对象的模板

首先声明一个类文件,声明的类与这个类所在的文件推荐同名

权限修饰符
  1. private 私有成员,仅限本类中的使用
  2. protected 受保护成员,仅限本类以及子类让问
  3. public 公共成员
    由上到下,权限越来月大。
    this,self,static
    $this和self指的都是当前类。
    static 是静态标识,不是类实例方法,可以使用类直接访问。
    类模板
  1. class Product{
  2. //属性
  3. //protected 受保护成员,仅限本类以及子类访问
  4. protected $name;
  5. //private 私有成员,仅限本类中的使用
  6. private $price;
  7. //函数
  8. //构造方法
  9. public function __construct($name,$price)
  10. {
  11. //初始化类成员,让类/实例化状态确定下来
  12. //生成类的实例
  13. //2.给这个新类复制属性
  14. $this->name=$name;
  15. $this->price=$price;
  16. //return $obj;
  17. }
  18. //实例方法
  19. public function show():string
  20. {
  21. return "$this->name:$this->price";
  22. }
  23. }

spl_autoload_registe类的自动加载器函数

  1. spl_autoload_register(function($class){
  2. require $class.'.php';
  3. });

引用后require 包含这个函数的文件后,当前也new的对象自动调用这个函数,
注意:类名应和文件名一致,才起作用

静态成员和方法

  1. //类的静态成员
  2. //类中成员,属性和方法
  3. //类中成员并非全部都要使用类实例方法,也可直接使用类访问成员
  4. //这个就是静态成员
  5. class Staff{
  6. public static $name;
  7. public static $salary;
  8. public function __construct($name,$salary)
  9. {
  10. //静态成员与实例无关,当然不能使用$this访问,用类的引用
  11. //self:当前类的引用
  12. self::$name=$name;
  13. self::$salary=$salary;
  14. }
  15. //静态方法
  16. public static function show(){
  17. return 'self::$name, self::$salary';
  18. }
  19. }

注意:类实例可以访问静态方法,但不能访问静态属性

类的扩展

extends 继承,子类只能继承一个父类,可以调用父类除了私有权限的所有属性和方法。也可以自己定义函数方法和属性。

trait

trait 理解为一个公共方法集。
trait 借用了class语法实现的一个轻量级的类,但不是类,所以不能实例化
trait声明一个类,在调用它是只需要在本类中使用use trait声明的类明即可。
一个类中可以调用多个trait。如果trait之间有同名方法,可以设定优先级,或者别名
当trait和父类中有同名方法是,trait优先级比父类高。

  1. trait T1
  2. {
  3. public function m1()
  4. {
  5. return __METHOD__;
  6. }
  7. }
  8. trait T2
  9. {
  10. public function m1()
  11. {
  12. return __METHOD__;
  13. }
  14. }
  15. class A{
  16. //在要使用trait的类中,使用use关键字引用它即可
  17. use T1;
  18. }
  19. class B{
  20. use T1,T2{
  21. //优先级
  22. T1::m1 insteadOf T2;
  23. //别名
  24. T2::m1 as T2m1;
  25. }
  26. }
  27. echo (new A)->m1();
  28. echo (new B)->m1();
  29. //如果要引用多个trait
  30. // 1.优先级
  31. // 2.起别名
  32. echo (new B)->T2m1();
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议