讲师中心 微信公众号
AI工具推荐 视频效率加速

前端学PHP之面向对象系列第四篇关键字

秋枫姑娘_1036

秋枫姑娘_1036

发布时间:2016-11-16 10:24:02

|

1329人浏览过

|

来源于php中文网

原创

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

前面的话

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

 

立即学习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>
?>

 

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;

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

 

立即学习PHP免费学习笔记(深入)”;

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>
?>
<script type="text/javascript">// <![CDATA[ var all = document.getElementById('cnblogs_post_body').children; var select = []; for(var i = 1; i < all.length; i++){ if(all[i].getAttribute('id')){ if(all[i].getAttribute('id').match(/anchor\d+$/)){ select.push(all[i]); } } } var wheel = function(e){ e = e || event; var data; if(e.wheelDelta){ data = e.wheelDelta; }else{ data = -e.detail * 40; } for(var i = 0; i < select.length; i++){ if(select[i].getBoundingClientRect().top > 0){ return; } if(select[i].getBoundingClientRect().top <= 0 && select[i+1]){ if(select[i+1].getBoundingClientRect().top > 0){ change(oCon.children[i+2]) } }else{ change(oCon.children[select.length+1]) } } } document.body.onmousewheel = wheel; document.body.addEventListener('DOMMouseScroll',wheel,false); var oCon = document.getElementById("content"); var close = oCon.getElementsByTagName('span')[0]; close.onclick = function(){ if(this.innerHTML == '显示目录'){ this.innerHTML = '&times;'; this.style.background = ''; oCon.style.border = '2px solid #ccc'; oCon.style.width = ''; oCon.style.height = ''; oCon.style.overflow = ''; oCon.style.lineHeight = '30px'; }else{ this.innerHTML = '显示目录'; this.style.background = '#3399ff'; oCon.style.border = 'none'; oCon.style.width = '60px'; oCon.style.height = '30px'; oCon.style.overflow = 'hidden'; oCon.style.lineHeight = ''; } } for(var i = 2; i < oCon.children.length; i++){ oCon.children[i].onmouseover = function(){ this.style.color = '#3399ff'; } oCon.children[i].onmouseout = function(){ this.style.color = 'inherit'; if(this.mark){ this.style.color = '#3399ff'; } } oCon.children[i].onclick = function(){ change(this); } } function change(_this){ for(var i = 2; i < oCon.children.length; i++){ oCon.children[i].mark = false; oCon.children[i].style.color = 'inherit'; oCon.children[i].style.textDecoration = 'none'; oCon.children[i].style.borderColor = 'transparent'; } _this.mark = true; _this.style.color = '#3399ff'; _this.style.textDecoration = 'underline'; _this.style.borderColor = '#2175bc'; } // ]]></script><script type="text/javascript" src="http://files.cnblogs.com/files/xiaohuochai/contextMenu.js"></script>
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

0

2026.09.20

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

160

2026.09.16

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

60

2026.09.16

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

80

2026.09.16

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

60

2026.09.16

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

40

2026.09.16

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

380

2026.09.11

GDB怎么查看变量值
GDB怎么查看变量值

本专题介绍GDB调试过程中查看变量值的具体方法,涵盖局部变量、函数参数、数组、结构体和指针内容查询,同时整理变量持续显示、格式化输出及无法读取变量时的排查思路。

120

2026.09.11

GDB C++程序怎么调试
GDB C++程序怎么调试

本专题围绕GDB调试C++程序的实际过程,详细说明程序编译、调试器启动、命令行参数传入、断点命中和程序继续运行等步骤,并介绍条件断点、临时断点和观察点的设置方法,方便开发者跟踪复杂代码的执行状态。

140

2026.09.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn