PHP中类的使用方法:

在这里,我想总结一下一般类、抽象类、trait和接口等的使用方法。

类的使用方法

在中文中,类是将变量、常量和方法集合在一起的结构。按照各自的角色创建类,并使用类的实例来运行程序,这被称为面向对象编程。

class Product{
    //公開条件にはpublic、protected、privateがある。
    // publicは外から使える→インスタンス後にアクセスできるということ
    // protectedは自分と継承先のクラスが使うことができる
    // privateはクラス内でしかプロパティやメソッドにアクセスできない→変数などはprivateが安全(外から書き換えられないから)

    // 変数
    private $product = [];

    // 関数
    // コンストラクトメソッドはクラスがインスタンス化される際に呼び出される
    // $thisはnewによりインスタンス化したオブジェクトを指す
    function __construct($product=null){
        $this->product[] = $product; 
    }

    public function getProduct(){
        $products = $this->product;
        foreach($products as $product){
            echo $product;
        }
    }

    public function addProduct($item){
        $this->product[] = $item;
    }

    // staticはクラスメソッドを定義できる
    // Class::メソッド名()で使うことができる
    public static function getStaticProduct($str){
        echo $str;
    }
}
$instance = new Product('インプット');

$instance->getProduct();
=> 'インプット'

$instance->addProduct('追加');
$instance->getProduct();
=> 'インプット'
=> '追加'

Product::getStaticProduct('静的');
=> '静的'

继承

一个类具有单一继承的功能,可以继承一个类。
子类可以使用父类的变量和方法等。

class Parente{
  protected $parentVariable = '親の変数です';

  public function parentfunc(){
    echo "親の関数です";
  }
}

class Child extends Parente{
    public function test(){
      echo $this->parentVariable;
    }
}

$instance = new Child();

$instance->test();
=> '親の変数です' // 変数のアクセス修飾子はprotectedなので継承先のクラス内でも使える

$instance->parentfunc();
=> '親の関数です'

界面 (jiè

要求继承类中的方法。
接口内所写的方法必须在继承类中使用。
接口只能写空的公有方法,不能实例化。
继承方式使用implements,并且可以继承任意数量。

interface ExampleInterface{
    // helloメソッドを継承先のクラスに置いて定義しなければエラーが出る
    public function hello();
}

interface ExampleInterface2{
    // goodMorningメソッドを継承先のクラスに強制
    public function goodMorning();
}

class Example implements ExampleInterface, ExampleInterface2{
    public function hello(){
        echo 'こんにちは';
    }

    public function goodMorning(){
        echo 'おはよう';
    }
}

这个时候使用的原因不明确,但我想在查看源代码的同时加深理解。

抽象类

抽象类就像给类赋予了接口的功能一样。(无法实例化)
抽象类定义为类名加上Abstract。
为了方便理解,很多时候在类名中加上Abstract。

在方法定义之前使用abstract public(protected) 〜会强制在继承类中提供该方法。

<?php

abstract class ExampleAbstract{
  protected $abstractVariable = '抽象クラスの変数です';

  public function goodEvening(){
    echo 'こんばんは';    
  }

  abstract protected function hello();
}

class Example extends ExampleAbstract{
  public function hello(){
    echo 'こんにちは';
    echo $this->abstractVariable;
  }

  public function goodMorning(){
    echo 'おはよう';
  }
}

$instance = new Example();
$instance->hello();
=> 'こんにちは抽象クラスの変数です';
$instance->goodEvening();
=> 'こんばんは';

特质 (tè zhì)

在中国,原生的中文有一个选项是”一个类只能继承一个类,但可以继承多个特征的类,类似于可以实例化的类(使用trait trait name时,要在想使用的类内使用use)”。

trait ExampleTrait{
  protected $traitVariable = '抽象クラスの変数です';

  private $traitPrivateVariable = 'トレイトのプライベート変数です';

  public function hello(){
    echo 'こんにちは';
  }
}

trait ExampleTrait2{
  public function goodEvening(){
    echo 'こんばんは';
  }
}

class Example{ 
  use ExampleTrait;
  use ExampleTrait2;

  public function goodMorning(){
    echo 'おはよう';
    echo $this->traitVariable;
    echo $this->traitPrivateVariable;
  }
}

$instance = new Example();
$instance->goodMorning();
=>'おはよう抽象クラスの変数ですトレイトのプライベート変数です'

在使用trait的类中,我可以直接使用在trait内定义的私有变量…… 这让我觉得trait非常易用。它就像是扩展了类的功能。

最后

对于方法的强制使用等问题,我还不太清楚,但我已经输出了在php中使用类的方法。我也计划在这里添加我在学习类相关内容时的总结。

广告
将在 10 秒后关闭
bannerAds