面向对象编程(PHP)

面向对象编程 (mian4 xiang4 dui4 xiang4 bian1 cheng2) 是一种编程范式。

面向对象(Object Oriented Programming,简称OOP)是一种系统构建的方法。顺带一提,系统是指各个元素相互影响并作为整体运作的结构概念,它是通过组合类来构建的。

假设要将一个系统的源代码编写在一个类内,尽管有可能将所有内容都写入其中,但代码会变得冗长且复杂,从而降低可读性,并且一旦需要修改或添加功能,就会产生大量的劳动量,这一点很容易想象得到。

因此,根据各个角色创建并分配类,将每个类视为具有特定角色的物体(对象),这就是面向对象的产物。

具体来说,一台电脑包括键盘、鼠标、显示器等组件。

就像這個零件中有各自的角色一樣,我們可以為具有角色的物件分類並分類相應的類別。這樣,當鍵盤出現故障時,只需要修改鍵盤類別的源代碼即可修復,同樣地,當我們想要新增功能時,只需更改相關的類別即可。

换句话说,面向对象是一种按照物体的具体角色将其分成类,并定义物体之间的关系来构建系统的系统构建思想,它是一种代码组织的方式。

面向对象带来的好处

在构建大型系统时,面向对象的编程方法可以带来许多优势。

可以根据功能的角色,将代码分成类或文件等不同的源代码,从而实现多人共同开发一个系统的目的。

另外,由于将源代码分离,短而简洁的代码具有高可读性,同时处理也简单,测试也更容易执行。

按照角色进行划分的班级,可以在外部需要时及其他各种场合进行重复使用。
例如,在会计系统中,预计消费税计算程序可以在各种场合使用,因此如果将消费税计算处理整合为一个整体,便可以实现重复使用。

由于可以理解该类的创建意图,因此易于管理信息,即使发生规格变更,也容易确定变更位置,影响范围较小,具有高维护性的优点。

因此,采用面向对象的语言在构建大型系统时往往被广泛采用。

关于班级

班级可以说是一份设计图纸。

举个例子,当我们想要制造一辆汽车时,想象一下汽车可能拥有的功能,除了具有颜色和所有者等特定信息外,汽车还配备了加速、减速、车灯的点亮和熄灭等必要功能,以确保其作为一辆汽车的存在。

虽然颜色和所有者可以改变,但基本上是车辆固有属性。
当踩下油门时,这些功能负责加速;当踩下刹车时,负责减速,这称为方法。

在中文中,我们可以这样表达:

定义了这些物体的信息和功能的东西称为类,可以说类就是该物体的设计图。因此,类中可以定义方法和声明属性。

关于实例

由前述可知,类就像一张纸一样,所以无法仅通过一张纸的类本身来进行处理。
因此,需要根据这份设计图生成一个实体来执行处理。

根据这个设计图所创建的实物被称为实例,将其具体化的过程称为实例化。

雖然可以說實際上,實例本身是一個不可移動的純粹物體。
因此,對於實例化的物體,需要提供命令,如調用方法等。
(在實例化時,也可以在類內自動執行實例的處理記述)

如果有设计图纸,可以从同一类中生成多个不同个性的汽车,因此在设计图纸中需要定义所有汽车共同拥有的内容。

虽然如此,如果在车辆设计图的所有者栏中写着“所有者是太郎”,那么所有车辆的所有者都会被生成为太郎,因此最好不要在一开始就决定属性值,类似于变量的初始化。

因此,最好的做法是只在类中定义属性的标题,并在每个实例上分别赋值。

根据这个理论,在实例化之后,需要进行填充属性值的描述。因此,理想情况下,我们创建一个模糊存在的实例,并同时填充值以实现完全实体化。在PHP中,我们将其称为构造函数。

如果使用构造函数,就可以在实例生成时自动执行处理。

封装

在面向对象编程中有三个重要的特性。
其中之一是封装。

就拿人类这个类来说,人类有一个属性叫做名字。
然而,这个名字并不是随意可以轻易更改的,也不是别人故意可以改变的,而且如果在SNS等社交媒体上公开真实姓名,个人信息就会被传播,因此也是一个想要隐藏的信息。

如果想要进行更改,本人需要在政府部门进行手续办理。为了防止恶意修改属性、疏忽失误或意外情况下外部类的修改,必须采取相应措施。

另外,车辆具有踩油门就前进的不可动摇的功能。如果改变这个功能,将动摇车辆的存在意义,因此要将这个功能封闭在密封容器内。

为了实现这一目标,存在着叫做封装的机制。

封装功能之一是访问控制,其中包含私有(private)和公共(public)两种权限。

私有(private)是一种修饰符,用于允许仅在类内部进行访问。私有化后,它变成了一个无形的存在,无法被外部类进行修改甚至是引用。
基本上,将属性的访问权限设置为私有是最理想的。

在相反的情况下,如果给它加上public修饰符,就可以从外部类中引用和修改它。

如果使用public

<?php

  class Human {    //人間クラスを定義
    puclic $name  //氏名属性を定義してパブリック修飾子を付ける
    public function __construct($name) {
      $this->name = $name;
    }
  }
  //クラス外
  $japanese = new Human('taro');  //人間クラスをインスタンス(実体)化

  echo $japanese->name;  //japaneseインスタンス変数の氏名属性値を出力

  //出力結果:taro
?>
?>

如果使用private

<?php

  class Human {    //人間クラスを定義
    private $name  //氏名属性を定義してプライベート修飾子を付ける
    public function __construct($name) {
      $this->name = $name;
    }
  }
  //クラス外
  $japanese = new Human('taro');  //人間クラスをインスタンス(実体)化

  echo $japanese->name;  //japaneseインスタンス変数の氏名属性値を出力

  //出力結果:エラー
?>

获取者

如果将属性的访问权限设为private,那么就无法从类的外部获取属性的值,就像上面的代码一样。

因此,作为一个仅返回属性值的方法之一,存在着”getter”。
通常情况下,getter被命名为”get属性名”。

<?php
  class Human {   
    private $name  //プライベート修飾子を付けている
    public function __construct($name) {
      $this->name = $name;
    }
    public function getName() { //ゲッターを定義
      return $this->name;
    }
  }
  //クラス外
  $japanese = new Human('taro');   
  echo $japanese->getName();  //ゲッターの呼び出し

  //出力結果:taro

?>

接应员

私たちがプライベートアクセス修飾子でプロパティの値を変更できない場合、その値を変更するための「セッター」と呼ばれるメソッドが存在します。
セッターメソッドは通常、「setプロパティ名」という名前が付けられます。

这次到此为止。

广告
将在 10 秒后关闭
bannerAds