Blogger Information
Blog 14
fans 0
comment 3
visits 17523
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php面向对象编程(oop)基础
余生
Original
1140 people have browsed it

php面向对象编程(英语:Object-oriented programming,缩写:OOP),对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。

个人理解,万物皆对象,通过定义类然后为这个类添加属性方法,再将其实例化的过程为面向对象编程,抽象是抽象了点,但是实质上对象无处不在,看个人如何去定义,有这样一句话“佛说:要有光,于是就有了光”,对象也是如此,你可以成为这个佛,但是编程也是为大众服务的,所以对象也要贴近现实。

本文包含内容:
类的构成、依赖注入、final, self, $this关键字的使用、oop封装与继承。

一.类的构成
1.每个类的定义都以关键字 class 开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义,类名可以是任何非 PHP 保留字的合法标签。

一个合法类名以字母或下划线开头,后面跟着若干字母,数字或下划线。以正则表达式表示为:[a-zA-Z\x7f-\xff][a-zA-Z0-9\x7f-\xff]*。

2.类属性:一定要有关键词修饰,public(公有的)、private(私有的)、protected(受保护的)、static(静态的);

3.类方法:一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)

4.类实例化:对象引用名 = new 类名([参数列表]) or 对象引用名 = new 类名;

上代码:

  1. <?php
  2. class apple{
  3. // 类属性 ,一定要有关键词修饰 public private protected static
  4. public $ipad = "max";// 默认值
  5. public $mac;
  6. public $iphong;
  7. // 类构构造方法/器,创造对象时对对象属性进行初始化辅助,每创建一个对象,__construct()自动会被调用一次
  8. public function __construct($ipad=""){
  9. $this->ipad = $ipad; //$this 特殊的对象引用 ,代表本对象,专门完成对象内部成员的访问
  10. }
  11. // 类方法
  12. public function style(){
  13. echo "There are three";
  14. }
  15. public function price(){
  16. echo "$900";
  17. }
  18. public function size(){
  19. echo "12 inches";
  20. }
  21. }
  22. // 类实例化
  23. // 对象引用名 = new 类名([参数列表]) 对象引用名 = new 类名
  24. $apl = new apple;
  25. // 访问对象属性,对象方法 ->
  26. echo $apl->style();
  27. // 将对象重新赋值 在类的外部
  28. $apl->ipad = 'ipadmini';
  29. echo $apl->price();

二、依赖注入

  1. class Users{
  2. public $name = '老胡';
  3. public function action(Closure $act,string $name1){
  4. // 在类方法中访问类外部成员:变量,函数
  5. //$str = act();// 局部变量,非类属性
  6. //global $name1;
  7. //return $this->name . "和".$GLOBALS['name1'].$str;
  8. return $this->name ."和".$name1.$act();
  9. }
  10. // 在实际项目中,外部成员应该通过方法参数,注入到成员方法中,而不是在方法中直接调用
  11. }
  12. $act = function(){
  13. return '一起去搓澡';
  14. };
  15. $name1 ="胖子";
  16. // echo (new Users)->action();
  17. echo (new Users)->action($act,$name1);// 老胡和胖子一起去搓澡

三、final, self, $this关键字的使用

1.$this :特殊的对象引用 ,代表本对象,专门完成对象内部成员的访问
2.self 是类内部代替类名的关键字,可以用来在类内部完成静态成员的访问(类常量)以及在类内部实例化对象
3.final :加在类前,表示该类不能被继承加在方法前,表示该方法不能被重写

$this与final上下例子都有使用与注解,这里安排一下self

  1. //在内部实例化
  2. class credit{
  3. const CONSTANT ='con';
  4. private static $age = 18;
  5. static function getAge(){
  6. echo credit::$age.'<br>';//18
  7. echo self::$age.'<br>';//18
  8. echo self::CONSTANT.'<br>';//con
  9. }
  10. }
  11. // 外部使用类名访问
  12. credit::getAge();

访问静态

  1. // static 标识静态成员(方法,属性),静态成员只能由类来调用,为所有对象共享
  2. class User {
  3. public $name = "大哥";
  4. public $options = [1,2,3];
  5. public static $nation = "china";
  6. public $salary;// 抽象属性
  7. }
  8. $user = new User;
  9. // 访问静态成员 使用:: 范围解析符
  10. echo User::$nation;//china
  11. class myClass{
  12. public $age = 18;
  13. static $name = "刘亦菲";
  14. static $count;
  15. function __construct(){
  16. self::$count++;
  17. }
  18. public static function getCount(){
  19. return self::$count;
  20. }
  21. }
  22. // 对类中的静态属性进行初始化赋值 为0
  23. myClass::$count = 0;
  24. $myc = new myClass;
  25. // 访问静态成员的方法
  26. echo myClass::$count;
  27. echo myClass::getCount();
  28. //echo $myc->getCount(); 通过对象也可以访问静态成员方法

四、oop封装与继承

  1. <?php
  2. /**
  3. * 封装性
  4. */
  5. class User{
  6. //public 公共成员 , 类外部和内部都能访问
  7. public $name = '胡八一';
  8. //private 私有成员,仅限于本类中使用,外部和子类中是访问不到
  9. private $age = 30;
  10. //protected 受保护成员,除了外部不可见,内部和子类均可见
  11. protected $salary = 8000;
  12. public function write()
  13. {
  14. return "姓名{$this->name},年龄{$this->age},工资:{$this->salary}";
  15. }
  16. }
  17. //echo (new User)->age;//Cannot access private property User::$age
  18. //echo (new User)->salary;//Cannot access protected property User::$salary
  19. echo (new User)->name;
  20. echo (new User) -> write();
  21. //子类
  22. echo '<hr>';
  23. class Rob extends User
  24. {
  25. public function write()
  26. {
  27. return "姓名{$this->name},工资:{$this->salary}";
  28. }
  29. }
  1. <?php
  2. /**
  3. * 对象的继承与扩展
  4. *
  5. * final:加在类前,表示该类不能被继承
  6. * final :加在方法前,表示该方法不能被重写
  7. */
  8. class User{
  9. protected $salary = 8000;
  10. public function write()
  11. {
  12. return "工资:{$this->salary}";
  13. }
  14. }
  15. //子类
  16. class Rob extends User
  17. {
  18. //1.扩展
  19. //属性扩展
  20. protected $name = "胡歌";
  21. protected $age= 45;
  22. //方法扩展
  23. // public function write()
  24. // {
  25. // return parent::write(). ",age:{$this->age}";
  26. // }
  27. //2. 重写
  28. //属性重写
  29. protected $salary = 10000;
  30. //方法重写
  31. public function write()
  32. {
  33. return parent::write(). ",age:{$this->age}";
  34. }
  35. }
  36. echo (new Rob) -> write();

拓展:
__construct() 构造函数
1.构造函数实例化类的时候会自动调用,
2.子类没有构造函数,会直接调用父类的构造涵数, 继承父类的属性和方法
3.子类和父类都有构造函数,实例子类时不会自动调用父类构造函数,只会调用子类自己的构造函数。

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

Correcting teacher:灭绝师太灭绝师太

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
1 comments
灭绝师太 2020-12-07 17:56:25
胡同学对耦合性(Coupling)有了自己的见解,想必也理解,类与类之间耦合过深会对整个项目的维护造成麻烦, 所以使用oop设计程序的时候,一定要考虑怎样降低程序的耦合度~
1 floor
Author's latest blog post