>  기사  >  백엔드 개발  >  PHP에서 $this의 사용법 및 액세스 한정자에 대한 자세한 설명

PHP에서 $this의 사용법 및 액세스 한정자에 대한 자세한 설명

小云云
小云云원래의
2018-03-15 15:23:133812검색

$this는 인스턴스화 없이 정적 메모리 공간이 생성되는 반면 클래스는 메모리 공간을 생성하기 전에 인스턴스화되어야 하기 때문에 클래스의 정적 함수에 사용할 수 없습니다. 두 메모리는 함께 있지 않으며 서로 액세스할 수 없습니다.

그러므로 다음 작성은 잘못되었습니다.

<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는 어떤 클래스의 위치와는 관계가 없고, 어떤 객체가 인스턴스화되는지만 알 수 있습니다.

2. 객체 환경은 다음과 같이 전달될 수 있습니다.


현재 메소드에서 객체 환경이 결정된 경우, 커버 메소드에서 비정적 메소드에 대한 정적 호출이 있는 경우, 그러면 현재 개체 환경은 정적으로 호출되는 비정적 메서드로 전달됩니다.

$이것이 항상 개체가 있는 위치를 나타내는 것은 아닙니다.

수정 한정자

public Public

protect Protected

private Private

멤버(속성, 메서드)에 액세스할 수 있는 위치를 설명하는 데 사용됩니다.

참고:

PHP는 클래스 개념을 사용하여 멤버를 수정하고 자격을 부여합니다.

PHP는 액세스된 코드를 클래스 내부, 클래스 외부, 상속 체인의 클래스 내부의 세 영역으로 나눕니다.

는 멤버가 액세스되는 위치와 멤버가 정의된 위치에 따라 결정됩니다.

속성을 예로 들어 보겠습니다.


public

Public은 멤버가 이 클래스에 있음을 의미합니다. 상속 체인의 클래스 내부와 클래스 외부 모두에 접근할 수 있습니다!

protect

Protected는 이 클래스 내에서 그리고 상속 체인(하위 클래스, 상위 클래스)의 클래스에서 멤버에 액세스할 수 있음을 의미합니다.

private

Private, 이는 이 범주 내에서만 접근 가능해요!

선택 방법:

한 가지 원칙은 캡슐화를 반영하도록 노력하는 것입니다. 캡슐화란 내부 구현을 최대한 숨기고 외부 작업 인터페이스만 개발하는 것을 의미합니다!

구문적으로, 즉 외부 사용에 필요하지 않은 속성과 메서드를 사유화(보호)하고 필요한 일부 공개 메서드만 남겨두세요!

需要注意的是:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.