PHP オブジェクトの基本を要約する

WBOY
リリース: 2023-04-10 22:18:01
転載
5403 人が閲覧しました

この記事では、主にオブジェクト指向関連を紹介する PHP に関する関連知識を紹介します オブジェクト指向プログラミングの本質は、データや関数の操作主体、つまりオブジェクトを増やすことです。みんなが助けてくれることを願っています。

PHP オブジェクトの基本を要約する

推奨学習:「PHP チュートリアル

php、thinkphp、Redis、vue、uni-app などの実践学習テクノロジー、推奨オープンソース電子商取引システム likeshop、アイデアから学ぶことができ、商用利用は無料で著作権にアクセスできます、gitee ダウンロード アドレス:
クリックしてプロジェクト アドレスを入力してください

オブジェクト指向: OOP(オブジェクト指向プログラミング)プログラミング

プロセス指向とはプログラミングの考え方

オブジェクト指向プログラミングの本質は、データや関数の操作主体、つまりオブジェクトを増やすことです

オブジェクト指向のすべてのデータと関数は、ほとんどが呼び出して操作するサブジェクト (オブジェクト) で構成されています

オブジェクト指向の基本

プロセス指向とオブジェクト指向の違い

PHP オブジェクトの基本を要約する

#オブジェクト指向キーワード

    クラス: クラス。オブジェクト指向サブジェクトの最も外側の構造を定義します。サブジェクトのデータをラップするために使用され、関数 (関数)
  • オブジェクト: インスタンスとも呼ばれる、特定のタイプのトランザクションの特定の代表であるオブジェクト
  • インスタンス化: 新しい、クラスからオブジェクトを生成するプロセス
  • クラスメンバー: member
    • メソッド: メソッド。基本的には、メンバーメソッドまたはメンバー関数と呼ばれる、クラス構造内に作成される関数です。
    • 属性: プロパティ。基本的に、クラス内に作成される変数です。メンバ変数と呼ばれる構造体
    • クラス定数: const、基本的にクラス構造体で作成されます。 定数
オブジェクトの作成

<?phpclass  People{}$man=new People();# 实例化类,man就是对象var_dump($man);?>
    # 输出object(People)#1 (0) { }
    #1表示:对象编号,与类无关,是整个脚本中对象的序号(0)表示:成员变量(属性)个数{}表示:具体成员变量信息(键值对)
ログイン後にコピー
クラス オブジェクト

<?phpclass  Buyer{
    # 常量声明
    const BIG_NAME=&#39;BUYER&#39;;
    # 常量不需要加 $

    # 属性声明
    # $name;
    # 错误的,类内部属性必须使用访问修饰限定符
    public $name;
    public $money=0;
    
    # 方法声明
    function display(){
        echo __CLASS__;
        # 魔术常量,输出类名
        # 方法内部变量属于局部变量
    }}# 实例化$a = new Buyer();# 属性操作,增删改查echo $a->money;$a->money='20';$a->sex='male';unset($a->name);echo '<br>';# 方法操作$a->display();echo '<br>';var_dump($a);?>
    # 输出0Buyerobject(Buyer)#1 (2) { ["money"]=> string(2) "20" ["sex"]=> string(4) "male" }
ログイン後にコピー

注: クラス定数はオブジェクトによってアクセスされません

アクセス変更修飾子

プロパティまたはメソッドの前の変更キーワード。プロパティまたはメソッドのアクセス場所を制御するために使用されます。

    public: パブリック、クラスの内部と外部の両方 Access
  • protected: 保護され、関連するクラス内でのみアクセスが許可されます
  • private: プライベート、のみ定義クラス内でのアクセスを許可します。
属性にはアクセス変更修飾子が必要です。メソッドにはアクセス変更修飾子を含めることはできません。デフォルトは public

クラスの内部オブジェクトです

$this (メソッドに組み込まれたオブジェクト) は、呼び出されるメソッドのオブジェクトを自動的に指します

$this はメソッド内に存在します (内部使用のみ)。クラスの構造内で

    #アクセス変更修飾子によって変更された任意のメンバーにアクセスできます
  • プライベート メンバーはパブリック メソッドを通じてアクセスされます (パブリック メソッドはクラスの外部からアクセスできます)
<?phpclass  Article{
    protected $name = &#39;a&#39;;
    private $type = &#39;art&#39;;

    public function get_name()
    {
        var_dump($this);
    }}$a = new Article();var_dump($a);?>
    # 输出object(Article)#1 (2) { ["name:protected"]=> string(1) "a" ["type:private"]=> string(3) "art" }
ログイン後にコピー
$this はオブジェクトを表し、$this が配置されている環境はクラス内のメソッド内にあるため、 $ this オブジェクトはクラス内でアクセスされるため、すべてのプロパティとメソッドが制限されませんアクセス変更修飾子による

PHP オブジェクトの基本を要約する

PHP オブジェクトの基本を要約する

PHP オブジェクトの基本を要約する構築方法

    __construct() はシステム組み込みのマジック メソッドです。このメソッドの特徴は、オブジェクトがインスタンス化された直後にオブジェクトが自動的にこのメソッドを呼び出すことです
  • コンストラクターの目的は次のとおりです。オブジェクト プロパティやその他のリソースを含むリソースを初期化します。
  • コンストラクターが定義され、コンストラクターに独自のパラメーターが指定されると、新しいクラス名 (パラメーター リスト) メソッドのみを使用して、正しくインスタンス化してください
  • マジック メソッドはオブジェクトから直接呼び出して呼び出すこともできますが、実用的ではありません
  • <?phpclass  Article{
        public $name=&#39;xiaoli&#39;;
        private $sex="male";
    
        public function __construct($name,$sex)
        {
            $this->name = $name;
            $this->sex = $sex;
        }}$a = new Article('xiaowang', 'famale');var_dump($a);?>
    ログイン後にコピー
  • Destructorオブジェクトが破棄されると自動的に呼び出されるメソッド

#destruct() は、リソースを解放します。
  • オブジェクトの破棄
  • オブジェクトには変数がありません。 ポインティング (変数は他のデータを指します)
    1. オブジェクトはアクティブに破棄されます (設定を解除するとオブジェクト変数が破棄されます)
    2. スクリプトの実行が終了します (リソースが自動的に解放されます)
    PHP スクリプトの実行時、すべてのリソースが解放されるため、一般にデストラクター メソッドはあまり使用されません。
  • <?phpclass  Article{
        protected $name = &#39;xiaoli&#39;;
        private $sex = &#39;famale&#39;;
    
        public function __destruct()
        {
            // TODO: Implement __destruct() method.
            echo __FUNCTION__;
        }}$a=new Article();# 销毁对象$a=1;unset($a);# __destructendecho &#39;end&#39;;?>
        # 不销毁对象,php在运行结束也会释放资源# end__destruct
    ログイン後にコピー
  • 値を渡すオブジェクト

定義: オブジェクトを保持する変数を別の変数に代入します

PHP では、オブジェクトの値は参照によって渡されます。つまり、1 つのオブジェクト変数が別の変数に割り当てられ、2 つの変数が同じオブジェクト アドレスを指します。つまり、オブジェクトは 1 つだけです。

範囲解決演算子 (クラス定数アクセス)

「::」を形成する 2 つのコロンがあります。これは、

クラスがクラス メンバーの操作を実装するために特別に使用されます

。クラスは直接クラス メンバーへのアクセス

スコープ解決演算子は、クラス (クラス名) のクラス メンバーにアクセスするために使用されます。
    <?phpclass  Article{
        public $name = &#39;xiaoli&#39;;
        public $sex = &#39;famale&#39;;}$a=new Article();$b=$a;var_dump($a,$b);echo &#39;<br>';$a->name="wangxiaohu";var_dump($a,$b);echo '<br>';?>
        # 输出object(Article)#1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" } object(Article)
        #1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" }object(Article)
        #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" } object(Article)
        #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" }
    ログイン後にコピー
  • 範囲解決演算子は、次のことができます。オブジェクトによってクラスとしても使用されます (非推奨)
  • 类名::类成员
    ログイン後にコピー
  • クラス定数はクラスによってのみアクセスできます
  • $对象名::类成员
    ログイン後にコピー
    クラス定数は固定されており、一方、オブジェクトのプロパティはオブジェクトごとに異なります。

    PHP オブジェクトの基本を要約する

    静态成员

    定义:使用 static 关键字修饰的类成员,表示该成员属于类访问

    • 静态成员
      • 静态属性
      • 静态方法
    • 静态成员是明确用来给类访问的,而不是对象
    • 静态成员只是多了一个 static 关键字修饰,本身也可以被对象访问
    • 静态成员同样可以使用不同的访问修饰限定符限定,效果一致

    PHP オブジェクトの基本を要約する

    <?phpclass  Article{
        public static $name = &#39;hlm&#39;;
        public static $type = &#39;art&#39;;
    
        public static function getName()
        {
            return self::$name;
        }}# 静态属性$a = new Article();echo Article::$name;# 静态方法echo Article::getName();?>
    ログイン後にコピー

    self关键字

    • 在类的内部(方法里面)使用,代替类名的写法
    • self 如同 $this 代表内部对象一样,能够在方法内部代替当前类名
    • 能够保障用户方便修改类名字
    • self 关键字是代替类名,所以需要配合范围解析操作符 ::
    <?phpclass  Article{
        public static function getInstance1()
        {
            return new self();
        }
    
        public static function getInstance2()
        {
            return new Article();
        }}$a = Article::getInstance1();$b = Article::getInstance2();var_dump($a,$b);?>
        # 输出object(Article)
        #1 (0) { } object(Article)
        #2 (0) { }
    ログイン後にコピー

    类加载

    类的访问必须保证类在内存中已经存在,所以需要再用类之前将类所在的 PHP 文件加载到内存中

    • 类的加载分为两种

      • 手动加载:在需要使用类之间通过 include 将包含类的文件引入到内存
      • 自动加载:提前定义好类结构和位置,写好引入类文件代码,在系统需要类而内存不存在的时候想办法让写好的加载类的代码执行(自动加载是自动运行写好的加载类的代码)
    • 自动加载两种方式

      • 魔术函数 __autoload:系统自动调用,需要传入类名,在函数内部实现类的手动加载(PHP7及之后不建议使用此方法)
      function __autoload($classname){
          # 找到对应的文件路径和命名规范,手动加载}
      ログイン後にコピー
       
      • 自定义函数:自己定义类的加载实现,然后通过 spl_autoload_register 注册到自动加载机制(可注册多个自动加载)
      # 自定义类加载函数function 自定义函数($classname){
          # 找到对应的文件和命名规范,手动加载}#注册自动加载sql_autoload_register('自定义函数名字')
      ログイン後にコピー

    自动加载要求在声明类的时候有良好的规范

    • 类名与文件名一致:类名.php 或者 类名.class.php
    • 类文件分类放好

    PHP オブジェクトの基本を要約する

    例:手动加载

    PHP オブジェクトの基本を要約する

    Article.php

    <?phpclass  Article{
        public function getName(){
            return __METHOD__;
        }}
    ログイン後にコピー

    mian.php

    <?php # include &#39;Article.php&#39;;# 直接加载比较消耗资源,而且如果类已经在内存中存在,直接include会报错,建议判断后再加载if(!class_exists(&#39;Article&#39;)){
        include &#39;Article.php&#39;;}$a=new Article();var_dump($a->getName());
        # outputstring(16) "Article::getName"
    ログイン後にコピー

    自动加载

    • __autoload(不建议使用)

    一个系统中,可能类文件会放到不同的路径下,因此一个完整的自动加载函数,应该要进行文件判定功能

    <?php function __autoload($classname){
        # 形参代指 类名
        #组织文件路径,假设当前路径下,有两个文件夹下都有类c和类m
        $c_file = &#39;c/&#39; . $classname . &#39;.php&#39;;
        if (file_exists($c_file)) {
            include_once($c_file);
            return true;
        } 
        //if 语句如果只有一行不需要加 {}
        //include_once 只加载一次
    
        $m_file = &#39;m/&#39; . $classname . &#39;.php&#39;;
        if (file_exists($m_file)) {
            include_once($m_file);
            return true;
        }
    }
    
    
    $a=new Article();
    $b=new Article();
    ログイン後にコピー
    • spl_autoload_register
    <?phpfunction  autoload01($classname){
        if(!class_exists($classname)){
            $file_name=$classname.&#39;.php&#39;;
            if(file_exists($file_name)) include_once $file_name;
        }}spl_autoload_register(&#39;autoload01&#39;);$a=new Article();
    ログイン後にコピー

    对象克隆

    通过已有的对象复制一个新的同样的对象,但两者之间并非同一个对象

    PHP オブジェクトの基本を要約する

    PHP オブジェクトの基本を要約する

    面向对象高级

    面向对象三大特性

    封装、继承、多态

    类的封装

    PHP オブジェクトの基本を要約する

    类的继承

    inherit,子类合法拥有父类的某些权限

    • 继承必须满足继承关系:即存在合理的包含关系
    • 继承的本质是子类通过继承可以直接使用父类已经存在的数据和数据操作
    • PHP 使用 extends 关键字表示继承

    子类也称派生类

    父类也称基类

    # 父类class Human{}# 子类继承class Man extends Human{}
    ログイン後にコピー

    类的多态

    多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果

    • 需要发生类的继承,同时出现方法的重写(override),即子类拥有与父类同名的方法
    • 在实例化对象的时候让父类对象指向子类对象(强制类型,PHP不支持,PHP 弱类型很灵活)
    • 结果:父类对象表现的子类对象的特点

    PHP オブジェクトの基本を要約する

    —PHP继承—

    <?phpclass  Human{
        public function show(){
            echo __METHOD__;
        }}class Man extends Human{}$m=new Man;$m->show();
    ログイン後にコピー

    有限继承

    子类在继承父类的成员时,并非继承所有内容,而是继承并使用父类部分内容

    • PHP における継承の本質はオブジェクトの継承です。
    • PHP における継承されたコンテンツ: すべてのパブリック メンバー、保護されたメンバー、および親クラスのプライベート プロパティ、プライベート メソッドは継承できません
    • 保護されたメンバーは継承専用であり、親クラスまたはサブクラス内でアクセスできます。
    • プライベート メンバーは、所属するクラスでパブリック メソッドまたは保護されたメソッドを設定することによってのみアクセスできます
    • Constructionメソッドとデストラクター メソッドはサブクラスによって継承できます。

    override Override

    override、サブクラスは親クラスと同じ名前のメンバーを定義します

    PHP オブジェクトの基本を要約する

    #親キーワード

    親クラスのメンバーに明示的にアクセスするための式

    PHP オブジェクトの基本を要約する

    メソッドがオーバーライドされた後、呼び出されたメソッドにアクセスします。サブクラス メソッド。親クラス メソッドにアクセスしたい場合は、サブクラス メソッドでparentを使用して親クラス メソッドに強制的にアクセスできます。

    parentを使用して親クラスのプロパティにアクセスすることはできません(静的)

    ##PHP の継承機能

    #PHP は単一の継承のみ可能で、親クラスは 1 つだけあります (複数のクラスを継承する場合は、チェーン継承を使用できます)
    • PHP の継承では、継承できないのは Private メソッドのみです。
    • ##PHP では、親クラスでのコンストラクターとデストラクターの継承が可能です
    • ##静的遅延バインディング

    PHP オブジェクトの基本を要約する最終クラス Final

    final キーワードを使用してクラス名を変更し、このクラスが継承できないことを示しますPHP オブジェクトの基本を要約する

    final キーワードメソッドを変更することもでき、メソッドをオーバーライドできないことを示します (通常、この時点ではクラスは Final キーワードを使用しません)

    抽象クラス Abstract

    A クラスabstract キーワードで変更すると、クラスは継承のみ可能でインスタンス化できないことを示します。PHP オブジェクトの基本を要約する

    abstract キーワードはメソッドを変更でき、メソッドが抽象メソッドであることを示します。抽象メソッドにはメソッド本体がありません ({} はありません) )

    抽象メソッドを持つクラスは抽象クラスである必要があります

    抽象クラスを継承するクラスは、抽象クラスであるか、抽象クラス内のすべての抽象メソッドを実装する必要があります

    特性コードの再利用

    #異なるクラス間に共通のコードはあるが、クラス間に継承関係がない場合に適用されます。この場合、共通のコードは次のようになります。

    特性には、クラスが所有できる内部メンバー、プロパティ (静的メソッドを含む)、メンバー メソッド (静的メソッドと抽象メソッドを含む) を含めることができますが、クラス定数を含めることはできません

    PHP オブジェクトの基本を要約する特性はコードの再利用に使用されます。インスタンス化や継承はできません。

    特性は同じ名前です。

    クラスには複数の特性を導入する必要があり、同じ名前が別のクラスに表示される場合があります。特性

    インターフェース

    特別に使用されるインターフェース一部の共通クラスが実装する必要があるメソッドを標準化します

    PHP オブジェクトの基本を要約する

    インターフェースはクラスですが、クラスと似た構造を持っています。

    インターフェースはインスタンス化できませんが、クラスはインターフェースを実装できます

    #インターフェース インターフェース名{}
    • クラス クラス名実装インターフェイス名{}

    #インターフェイス メンバー

    インターフェイス メンバーは 2 つのタイプのみを持つことができます

    PHP オブジェクトの基本を要約する

    インターフェイス定数: const

    #一般的なインターフェイス メソッド (通常のメソッドと静的メソッド)

    #PHP オーバーロード
    • オーバーロードの意味同じ名前の複数のメソッドがクラス内に存在する可能性があり、パラメーターの数と型が互いに異なること

    フォールト トレランスに使用されるPHP オブジェクトの基本を要約する

    属性のオーバーロード

    オブジェクトが存在しないプロパティ、または権限が不十分なプロパティにアクセスする場合、コードが誤らないようにマジック メソッドが自動的にトリガーされます。オーバーロード マジック メソッド

    PHP オブジェクトの基本を要約する

    __get(属性名): 存在しない属性、または権限が不十分な属性にアクセスするときにトリガーされます。

    #__set(属性名、属性値) : 属性を設定するときにトリガーされます。存在しない、または権限が不十分な属性

    __isset(属性名): 存在しない、または権限が不十分な属性を判断するときにトリガーされます

    __unset(属性名): 存在しない、または権限が不十分な属性を削除します不十分な属性がある場合にトリガーされます

    __tostring(): 文字列として扱われます

    • メソッド オーバーロード
    • オブジェクトまたはクラス アクセスが存在しませんまたは権限が不十分なメソッド。コードをエラーなくするために自動的にトリガーされるマジック メソッドです。
      • __cal(方法名,方法参数列表):调用不存在或者权限不够的方法时触发
      • __callStatic(方法名,方法参数列表):调用不存在或者权限不够的静态方法时触发

      对象遍历

      将对象中的所有属性以键值对的形式取出并进行访问

      • 对象是一种复合数据类型,对象中真正保存的内容是属性

      • 对象的属性本质也是一种键值对关系:名字 = 值

      • 对象遍历就是利用 foreach 对对象中的属性进行取出解析

      • 对象遍历遵循访问修饰限定符的限定:即类外只能遍历所有共有属性

        foreach(对象变量 as [属性名变量 =>] 属性值变量){
            #属性名变量代表取出的每个属性的名字
            #属性值变量代表取出的每个属性的值}
        ログイン後にコピー

        PHP オブジェクトの基本を要約する

      Iterator 迭代器

      PHP オブジェクトの基本を要約する

      生成器

      PHP オブジェクトの基本を要約する

      PHP オブジェクトの基本を要約する

      yield 关键字

      设计模式

      design pattern,是软件开发人员在软件开发过程中问题的解决方法

      单例模式

      singleton,是一种类的设计只会最多产生一个对象的设计思想PHP オブジェクトの基本を要約する

      保证资源唯一性

      工厂模式

      。。。。。。

      命名空间

      namespace,指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目能出现重名结构问题

      PHP オブジェクトの基本を要約する

      基础语法:

      namespace 关键字定义空间

      命名规则

      字母、数字、下划线,不能以数字开头

      命名空间必须写在所有代码之前,定义了一个,之后可以定义多个

      PHP オブジェクトの基本を要約する

      子空间

      subspace,即在已有空间之上,再在内部进行空间划分

      子空间直接通过 namespace+路径符号 \ 实现

      非限定名称

      直接访问元素本身,代表当前所属空间(当前目录)

      限定名称

      使用空间名+原名,代表访问当前空间子空间(当前目录子目录)

      完全限定名称

      从根目录(全局空间)开始访问,使用 \ 作为全局空间开始符号(根目录)

      全局空间元素访问:使用完全限定名称访问

      PHP オブジェクトの基本を要約する

      命名空间引入

      PHP オブジェクトの基本を要約する

      推荐学习:《PHP视频教程

  • 以上がPHP オブジェクトの基本を要約するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    php
    ソース:csdn.net
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!