使用PHP类

首先

因为我只写过JavaScript,所以有很多陌生的写法。
可能有错误,请给予评论。

课堂的基本设置

<?php
class User
{
  //メンバー
  public $name;
  private $nickname;

  //コンストラクタ
  public function __construct($name,$nickname){
    //引数をメンバー変数に格納
    $this->name = $name;
    $this->nickname = $nickname;
  }
}

//インスタンス化
$user = new User('sato','unko');

echo $user->name;
echo $user->nickname;//Fatal error: Cannot access private property

?>

构造函数

构造函数使用__construct来创建方法。

访问成员

对于访问成员变量,可以使用箭头符号->。和在JavaScript中使用this.name类似?
不同于$this->$name = $name,在PHP中的规则是$this->name = $name。

访问修饰符

アクセス修飾子意味public外部から参照できるprivate変数、関数を宣言したクラス内のみ参照できるprotected変数、関数を宣言したクラスと継承されたクラスから参照できる

如果不做任何声明,将被视为public。

<?php
class User
{
  $name;

继承类

<?php
class User
{
  //メンバー
  public $name;

  //コンストラクタ
  public function __construct($name){
    //引数をメンバー変数に格納
    $this->name = $name;
  }

  protected function changeName($new_name){
    $this->name = $new_name;
  }
}

//classを継承
class ChildUser extends User{
  public function subChangeName($new_name){
    //protectedの関数は子クラスから呼ぶことは可能
    $this->changeName($new_name);
  }
};

//インスタンス化
$user = new User('sato');
echo $user->name;//sato

//Userクラスを継承したクラスをインスタンス化
$new_user = new ChildUser('kato');

$new_user->subChangeName('chinko');
echo $new_user->name;//chinko
?>

继承的方式

要进行继承,需要使用extends关键字。
※不支持多重继承。

class クラス名 extends 継承するクラス{}

重写

如果在子类中定义了与父类相同的变量和函数,则可以覆盖父类的变量和函数。

<?php
class User
{
  //メンバー
  private $name;

  //コンストラクタ
  public function __construct($name)
  {
    //引数をメンバー変数に格納
    $this->name = $name;
  }

  public function changeName($new_name){
    $this->name = $new_name;
  }
}

//classを継承
class ChildUser extends User{
  public function changeName($new_name){
    $this->name = $new_name . 'です。';
  }
};

//インスタンス化
$user = new User('sato');
//echo $user->name;//sato

$new_user = new ChildUser('sato');

$new_user->changeName('chinko');
echo $new_user->name;//chinkoです。
?>

如果不想被重写,请使用final关键字。
如果被重写了,将会显示错误消息。

<?php
class User
{
  //メンバー
  private $name = '佐藤';

  final public function changeName($new_name){
    $this->name = $new_name;
  }
}

//classを継承
//Fatal error: Cannot override final method
class ChildUser extends User{
  public function changeName($new_name){
    $this->name = $new_name . 'です。';
  }
};

?>

在课堂上使用常量

在课堂内部,使用const关键字而不是define来定义常量。

<?php
class User
{

  const CITY = 'TOKYO';

  public function __construct($name){
      //定数を表示
      echo self::CITY;//TOKYO
  }
}

const的使用方法

使用self关键字和::来指示类本身。

self::定数名

特性

用于代码重用的机制。它提供了像多重继承那样的易用性。

<?php

trait GreetAtrait{
  public function morning(){
    echo $this -> name . 'です。おはようございます。';
  }
  public function evening(){
    echo $this -> name . 'です。こんにちわ。';
  }
}

trait GreetBtrait{
  public function morningB(){
    echo $this -> name . 'です。眠いです。';
  }
  public function eveningB(){
    echo $this -> name . 'です。まだ眠いです。';
  }
}

class User
{
  //トレイトを指定
  use GreetAtrait,GreetBtrait;

  private $name;

  //コンストラクタ
  public function __construct($name){
      //引数をメンバー変数に格納
      $this->name = $name;
  }
}

$user = new User('佐藤');

$user -> morning();//佐藤です。おはようございます。
$user -> evening();//佐藤です。こんにちわ
$user -> morningB();//佐藤です。眠いです。
$user -> eveningB();//佐藤です。まだ眠いです。

?>

增加特征

class User{
  use トレイト名;

添加多个特征

class User{
  use トレイト名,トレイト名;

Traits that should be noted.

虽然方便,但过分使用会导致复杂的依赖关系,从而变得高度耦合。

总结

也许我能理解基础的基础知识,我也打算研究接口等内容。

广告
将在 10 秒后关闭
bannerAds