ホームページ  >  記事  >  バックエンド開発  >  PHP における $this の使用法とアクセス修飾子の詳細な説明

PHP における $this の使用法とアクセス修飾子の詳細な説明

小云云
小云云オリジナル
2018-03-15 15:23:133812ブラウズ

$this はクラス内の静的関数では使用できません。静的メモリ空間はインスタンス化せずに生成されますが、クラスはメモリ空間を生成する前にインスタンス化する必要があるためです。2 つのメモリは一緒ではなく、相互にアクセスできません。

つまり、次の記述は間違っています;

<span style="font-family: 微软雅黑, "Microsoft YaHei";">class Book extends Goods {<br/>	public $anthor;<br/>	public $publisher;<br/>	static public function get_author($author){<br/>		$this->author = $author;<br/>	} <br/>}</span>


つまり、$thisはオブジェクトを使用して非静的メソッドを呼び出すことによってのみ使用できます

非静的メソッドは後でのみ決定できます。オブジェクトが決定されます。

の値 $this を使用する基本的な理由:

1. メソッド内の $this は、次のようにそのオブジェクトです。

これも同様です。これは、$this がどのクラスの位置とは関係がなく、どのオブジェクトがインスタンス化されるかだけを示しています。

2. オブジェクト環境は引き継がれます:

オブジェクト環境が現在のメソッドで決定されている場合、カバーメソッド内で非静的メソッドへの静的呼び出しがある場合、その後、現在のオブジェクト環境が静的に呼び出される非静的メソッドに渡されます。

$this は、それが配置されているオブジェクトを常に表すわけではありません。

変更修飾子

public Public

protect Protected

private Private

メンバー (プロパティ、メソッド) にアクセスできる場所を記述するために使用されます。

注:

PHP は、クラスの概念を使用してメンバーを変更および修飾します。

PHP は、アクセスされたコードをクラス内、クラス外、継承チェーン上のクラス内の 3 つの領域に分割します。

は、メンバーがアクセスされる場所とメンバーが定義される場所に基づいて決定されます

プロパティを例に挙げます

public

publicは、メンバーがこのクラスに含まれていることを意味します継承チェーン上のクラス内とクラス外の両方にアクセスできます。

protect

Protectedとは、このクラス内および継承チェーン上のクラス(サブクラス、親クラス)のメンバーにアクセスできることを意味します

private

Private、このカテゴリ内のみを意味しますアクセスできます!

選択方法:

1 つの原則は、カプセル化を反映しようとすることです。カプセル化とは、内部実装を可能な限り隠し、外部操作インターフェイスのみを開発することを指します。

構文的には、つまり、外部使用に必要のないプロパティとメソッドをプライベート化 (保護) し、必要なパブリック メソッドの一部だけを残します。

需要注意的是:

1、一定要先明确访问的是哪里定义的!


2、私有成员不能被重写

只有在自己的类中才能访问到对应的私有成员


建议是

如果需要通过继承,你就使用保护的,少用私有的!

在没有继承时,尽量使用私有的!

3、在重写时,如果重写成员的访问级别不一致。子类的级别比父类的级别,相等或者弱,可以!强,不行!


这样是语法规定,如果想解释也是很简单的

是这样的,我简单说明
1 基类有一个方法,比如 // 我们不考虑Object作为所有类的基类啦。 呵呵呵!

public void method1(){
  method2(); // 此方法需要调用method2();
}
public void method2(){ // 如果这个方法是abstract 的话,也许会看得更清楚,不过不常见.
}

2 子类重写了 

@Override
private void method2(){ // 当然,编译错误,我们只是用来说明这样做的问题
}

3 子类的子类
如果他调用 method1() 会出现什么后果呢?
a) 他能访问method1(), 因为那是他的基类,且是public
b) 但很可惜,method1()里面 却不能访问method2()了,因为在父类是private的了。

这岂不是很可笑的情况。

所以,子类不能比父类的更私有,但可以更公开。 呵呵。这样才能保证父类已经实现的代码能够使用。

另:从5.0开始,子类方法override时,可以返回与父类不同的类型。但参数必须完全相同。

4、

1, 兼容性的问题

早先的 php的面向对象不完善,没有访问控制!

在声明属性时,使用 var 关键字!

声明方法时,什么都不使用!function

为了兼容,上面的做法还是可以使用!

var, function。访问权限都是public的!

相关推荐:

详解PHP中self与$this的区别

PHP中$this指针使用实例详解

php 静态函数中$this的问题

以上がPHP における $this の使用法とアクセス修飾子の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。