목차
目录
前面的话
public
protected
private
final
static
const
this
self
parent
php教程 php手册 PHP 프론트엔드 학습을 위한 객체지향 시리즈 4부의 키워드

PHP 프론트엔드 학습을 위한 객체지향 시리즈 4부의 키워드

Nov 16, 2016 am 10:24 AM

×
目录
[1]public [2]protected [3]private[4]final[5]static[6]const[7]this[8]self[9]parent

前面的话

  php实现面向对象的一个显著特征是大量使用关键字,本文将详细介绍关键字

 

public

  public表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问

  如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> demo{
    </span><span style="color: #0000ff;">public</span> <span style="color: #800080;">$public</span> = 1<span style="color: #000000;">;
    </span><span style="color: #0000ff;">function</span> test(<span style="color: #800080;">$var</span><span style="color: #000000;">){
        </span><span style="color: #0000ff;">echo</span> "{<span style="color: #800080;">$var</span>}000"<span style="color: #000000;">;
    }
}
</span><span style="color: #800080;">$d1</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> demo;
</span><span style="color: #800080;">$d1</span>->test(<span style="color: #800080;">$d1</span>-><span style="color: #0000ff;">public</span>);<span style="color: #008000;">//</span><span style="color: #008000;">1000</span>
?>
로그인 후 복사

 

protected

  protected表示受保护的,被定义为受保护的类成员则可以被其自身以及其子类和父类访问

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> demo{
    </span><span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> fn(){
        </span><span style="color: #0000ff;">echo</span> '111'<span style="color: #000000;">;
    }
}
</span><span style="color: #0000ff;">class</span> demo1 <span style="color: #0000ff;">extends</span><span style="color: #000000;"> demo{
    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> test(){
        parent</span>::<span style="color: #000000;">fn();
    }    
}
</span><span style="color: #800080;">$d1</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> demo1;
</span><span style="color: #800080;">$d1</span>->test();<span style="color: #008000;">//</span><span style="color: #008000;">111</span>
?>
로그인 후 복사

 

private

  private表示私有的,被定义为私有的类成员则只能被其定义所在的类访问

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> demo{
    </span><span style="color: #0000ff;">private</span> <span style="color: #800080;">$private</span> = 1<span style="color: #000000;">;
    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> test(){
        </span><span style="color: #0000ff;">echo</span>(<span style="color: #800080;">$this</span>-><span style="color: #0000ff;">private</span><span style="color: #000000;">);
    }
}
</span><span style="color: #800080;">$d1</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> demo;
</span><span style="color: #800080;">$d1</span>->test();<span style="color: #008000;">//</span><span style="color: #008000;">1</span>
?>    
로그인 후 복사

 

final

  PHP5新增了final关键字,它只能用来修饰类和方法,不能使用final这个关键字来修饰成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数和const关键字,所以不能使用final来定义成员属性

  如果父类中的方法被声明为final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> BaseClass {
   </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> test() {
       </span><span style="color: #0000ff;">echo</span> "BaseClass::test() called\n"<span style="color: #000000;">;
   }
   </span><span style="color: #0000ff;">final</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> moreTesting() {
       </span><span style="color: #0000ff;">echo</span> "BaseClass::moreTesting() called\n"<span style="color: #000000;">;
   }
}
</span><span style="color: #0000ff;">class</span> ChildClass <span style="color: #0000ff;">extends</span><span style="color: #000000;"> BaseClass {
   </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> moreTesting() {
       </span><span style="color: #0000ff;">echo</span> "ChildClass::moreTesting() called\n"<span style="color: #000000;">;
   }
}
</span><span style="color: #008000;">//</span><span style="color: #008000;"> Results in Fatal error: Cannot override final method BaseClass::moreTesting()</span>
?>
로그인 후 복사

 

static

  static关键字表示静态的意思,用于修饰类的成员属性和成员方法(即为静态属性和静态方法)

  类中的静态属性和静态方法不用实例化(new)就可以直接使用类名访问

  [注意]静态属性不能通过一个类已实例化的对象来访问,但静态方法可以

  由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用,静态属性不可以由对象通过 -> 操作符来访问

  用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误

  就像其它所有的 PHP 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Foo
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #800080;">$my_static</span> = 'foo'<span style="color: #000000;">;
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> staticValue() {
        </span><span style="color: #0000ff;">return</span> self::<span style="color: #800080;">$my_static</span><span style="color: #000000;">;
    }
}
</span><span style="color: #0000ff;">class</span> Bar <span style="color: #0000ff;">extends</span><span style="color: #000000;"> Foo
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> fooStatic() {
        </span><span style="color: #0000ff;">return</span> parent::<span style="color: #800080;">$my_static</span><span style="color: #000000;">;
    }
}
</span><span style="color: #0000ff;">print</span> Foo::<span style="color: #800080;">$my_static</span> . "\n";<span style="color: #008000;">//</span><span style="color: #008000;">'foo'</span>
<span style="color: #800080;">$foo</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Foo();
</span><span style="color: #0000ff;">print</span> <span style="color: #800080;">$foo</span>->staticValue() . "\n";<span style="color: #008000;">//</span><span style="color: #008000;">'foo'</span>
<span style="color: #0000ff;">print</span> <span style="color: #800080;">$foo</span>::<span style="color: #800080;">$my_static</span> . "\n";<span style="color: #008000;">//</span><span style="color: #008000;">'foo'</span>
<span style="color: #0000ff;">print</span> <span style="color: #800080;">$foo</span>->my_static . "\n"; <span style="color: #008000;">//</span><span style="color: #008000;">报错 </span>
?>
로그인 후 복사

 

const

  可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用$符号,而是使用const

  常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass
{
    </span><span style="color: #0000ff;">const</span> <span style="color: #008080;">constant</span> = 'constant value'<span style="color: #000000;">;
    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> showConstant() {
        </span><span style="color: #0000ff;">echo</span>  self::<span style="color: #008080;">constant</span> . "\n"<span style="color: #000000;">;
    }
}
</span><span style="color: #0000ff;">echo</span> MyClass::<span style="color: #008080;">constant</span> . "\n";<span style="color: #008000;">//</span><span style="color: #008000;">'constant value'</span>
<span style="color: #800080;">$classname</span> = "MyClass"<span style="color: #000000;">;
</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$classname</span>::<span style="color: #008080;">constant</span> . "\n"; <span style="color: #008000;">//</span><span style="color: #008000;">'constant value'</span>
<span style="color: #800080;">$class</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass();
</span><span style="color: #800080;">$class</span>->showConstant();<span style="color: #008000;">//</span><span style="color: #008000;">'constant value'</span>
<span style="color: #0000ff;">echo</span> <span style="color: #800080;">$class</span>::<span style="color: #008080;">constant</span>."\n";<span style="color: #008000;">//</span><span style="color: #008000;">'constant value'</span>
?>
로그인 후 복사

 

this

  当一个方法在类定义内部被调用时,有一个可用的伪变量this,特殊对象的引用this就是在对象内部的成员方法中,代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员。还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问

  [注意]this在静态方法中不可用

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> A
{
    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> foo()
    {
        </span><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$this</span><span style="color: #000000;">)) {
            </span><span style="color: #0000ff;">echo</span> '$this is defined ('<span style="color: #000000;">;
            </span><span style="color: #0000ff;">echo</span> <span style="color: #008080;">get_class</span>(<span style="color: #800080;">$this</span><span style="color: #000000;">);
            </span><span style="color: #0000ff;">echo</span> ")\n"<span style="color: #000000;">;
        } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
            </span><span style="color: #0000ff;">echo</span> "\$this is not defined.\n"<span style="color: #000000;">;
        }
    }
}
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> B
{
    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> bar()
    {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Note: the next line will issue a warning if E_STRICT is enabled.</span>
        A::<span style="color: #000000;">foo();
    }
}

</span><span style="color: #800080;">$a</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> A();
</span><span style="color: #800080;">$a</span>->foo();<span style="color: #008000;">//</span><span style="color: #008000;">$this is defined (A) </span>
A::foo();<span style="color: #008000;">//</span><span style="color: #008000;">$this is not defined. </span>
<span style="color: #800080;">$b</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> B();
</span><span style="color: #800080;">$b</span>->bar();<span style="color: #008000;">//</span><span style="color: #008000;">$this is defined (B) </span>
B::bar();<span style="color: #008000;">//</span><span style="color: #008000;">$this is not defined.</span>
?>
로그인 후 복사

 

self

  在类的方法中,不能用this来引用静态变量或静态方法,而需要用self来引用

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass
{
    </span><span style="color: #0000ff;">const</span> <span style="color: #008080;">constant</span> = 'constant value'<span style="color: #000000;">;
    </span><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> showConstant() {
        </span><span style="color: #0000ff;">echo</span>  self::<span style="color: #008080;">constant</span> . "\n"<span style="color: #000000;">;
    }
}
</span><span style="color: #800080;">$var</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MyClass;
</span><span style="color: #0000ff;">echo</span> <span style="color: #800080;">$var</span>->showConstant();<span style="color: #008000;">//</span><span style="color: #008000;">constant value</span>
?>
로그인 후 복사

 

parent

  parent用于调用父类中定义的成员方法或常量

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> MyClass{
    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> fn(){
        </span><span style="color: #0000ff;">echo</span>('111'<span style="color: #000000;">);
    }
    </span><span style="color: #0000ff;">const</span> A = 'a'<span style="color: #000000;">;
}
</span><span style="color: #0000ff;">class</span> Class1 <span style="color: #0000ff;">extends</span><span style="color: #000000;"> MyClass{
    </span><span style="color: #0000ff;">function</span><span style="color: #000000;"> test(){
        </span><span style="color: #0000ff;">echo</span> parent::fn().parent::<span style="color: #000000;">A;
    }
}
</span><span style="color: #800080;">$var</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Class1;
</span><span style="color: #800080;">$var</span>->test();<span style="color: #008000;">//</span><span style="color: #008000;">111a</span>
?>
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)