使用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.
虽然方便,但过分使用会导致复杂的依赖关系,从而变得高度耦合。
总结
也许我能理解基础的基础知识,我也打算研究接口等内容。