Maison  >  Article  >  développement back-end  >  Explication détaillée de l'utilisation et des qualificatifs d'accès de $this en PHP

Explication détaillée de l'utilisation et des qualificatifs d'accès de $this en PHP

小云云
小云云original
2018-03-15 15:23:133768parcourir

$this ne peut pas être utilisé dans les fonctions statiques des classes car les fonctions statiques génèrent de l'espace mémoire sans instanciation, tandis que les classes doivent être instanciées avant de générer de l'espace mémoire. Les deux mémoires ne sont pas ensemble et ne peuvent pas accéder l'une à l'autre.

Donc l'écriture suivante est fausse

<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>


C'est-à-dire qu'elle ne peut être utilisée qu'en appelant non ; -méthodes statiques utilisant des objets $this

Seulement une fois la méthode non statique déterminée, la valeur de $this peut être déterminée après l'objet

Raisons de base de l'utilisation de $this :

1. Quel objet appelle la méthode appelante, $this dans la méthode est cet objet

tout comme ce qui suit :

Cela montre également que $this n'a rien à voir avec la position de quelle classe, seulement avec quel objet est instancié.

2. L'environnement de l'objet peut être transmis :


S'il se trouve dans la méthode actuelle. , il a été déterminé Environnement objet, s'il y a un appel statique à une méthode non statique dans la méthode cover, l'environnement objet actuel sera transmis à la méthode non statique appelée statiquement,

$this Ce n'est pas l'objet qui représente toujours l'endroit où vous êtes fatigué.

Qualificateur de modification

public partagé

protéger protégé

private Private

est utilisé pour décrire où un membre (propriété, méthode) est accessible.

Remarque :

PHP utilise le concept de classes pour modifier et qualifier les membres.

PHP divise le code consulté en trois zones : au sein de la classe, en dehors de la classe et au sein de la classe sur la chaîne d'héritage.

est déterminé en fonction de l'endroit où le membre est accessible et de l'endroit où le membre est défini

Prendre la propriété comme exemple


public

Public signifie que les membres sont au sein de cette classe, au sein de la classe sur la chaîne d'héritage, et En dehors des cours, tout est accessible !

protect

protected fait référence à la classe dont les membres sont au sein de cette classe et sur la chaîne d'héritage (sous-classe, classe parent) Accessible dans

privé

Privé signifie que seul l'intérieur de cette classe est accessible !

Comment choisir :

Un principe, essayer de refléter l'encapsulation. L'encapsulation fait référence au fait de cacher autant que possible l'implémentation interne et de développer uniquement des interfaces d'opération externes !

Syntaxiquement, c'est-à-dire privatiser (protéger) les propriétés et les méthodes qui ne sont pas nécessaires à un usage externe, en ne laissant que quelques méthodes publiques nécessaires !

需要注意的是:

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的问题

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn