前端学PHP之面向对象系列第四篇——关键字
前面的话
php实现面向对象的一个显著特征是大量使用关键字,本文将详细介绍关键字
public
public表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问
如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有
<?php
class demo{
public $public = 1;
function test($var){
echo "{$var}000";
}
}
$d1 = new demo;
$d1->test($d1->public);//
?>
protected
protected表示受保护的,被定义为受保护的类成员则可以被其自身以及其子类和父类访问
<?php
class demo{
protected function fn(){
echo '111';
}
}
class demo1 extends demo{
function test(){
parent::fn();
}
}
$d1 = new demo1;
$d1->test();//
?>
private
private表示私有的,被定义为私有的类成员则只能被其定义所在的类访问
<?php
class demo{
private $private = 1;
function test(){
echo($this->private);
}
}
$d1 = new demo;
$d1->test();//
?>
final
PHP5新增了final关键字,它只能用来修饰类和方法,不能使用final这个关键字来修饰成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数和const关键字,所以不能使用final来定义成员属性
如果父类中的方法被声明为final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承
<?php
class BaseClass {
public function test() {
echo "BaseClass::test() called\n";
}
final public function moreTesting() {
echo "BaseClass::moreTesting() called\n";
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() called\n";
}
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>
static
static关键字表示静态的意思,用于修饰类的成员属性和成员方法(即为静态属性和静态方法)
类中的静态属性和静态方法不用实例化(new)就可以直接使用类名访问
[注意]静态属性不能通过一个类已实例化的对象来访问,但静态方法可以
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用,静态属性不可以由对象通过 -> 操作符来访问
用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误
就像其它所有的 PHP 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象
<?php
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";//'foo'
$foo = new Foo();
print $foo->staticValue() . "\n";//'foo'
print $foo::$my_static . "\n";//'foo'
print $foo->my_static . "\n"; //报错
?>
static的常用场景是迭代器中
function test(){
static $count = ;
$count++;
echo $count.' ';
if($count<){
test();
}
}
test();
const
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用$符号,而是使用const
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用
<?php
class MyClass
{
const constant = 'constant value';
function showConstant() {
echo self::constant . "\n";
}
}
echo MyClass::constant . "\n";//'constant value'
$classname = "MyClass";
echo $classname::constant . "\n"; //'constant value'
$class = new MyClass();
$class->showConstant();//'constant value'
echo $class::constant."\n";//'constant value'
?>
this
当一个方法在类定义内部被调用时,有一个可用的伪变量this,特殊对象的引用this就是在对象内部的成员方法中,代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员。还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问
[注意]this在静态方法中不可用
<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}
class B
{
function bar()
{
// Note: the next line will issue a warning if E_STRICT is enabled.
A::foo();
}
} $a = new A();
$a->foo();//$this is defined (A)
A::foo();//$this is not defined.
$b = new B();
$b->bar();//$this is defined (B)
B::bar();//$this is not defined.
?>
self
在类的方法中,不能用this来引用静态变量或静态方法,而需要用self来引用
<?php
class MyClass
{
const constant = 'constant value';
static function showConstant() {
echo self::constant . "\n";
}
}
$var = new MyClass;
echo $var->showConstant();//constant value
?>
parent
parent用于在子类中调用父类中定义的成员方法或常量
<?php
class MyClass{
function fn(){
echo('111');
}
const A = 'a';
}
class Class1 extends MyClass{
function test(){
echo parent::fn().parent::A;
}
}
$var = new Class1;
$var->test();//111a
?>
前端学PHP之面向对象系列第四篇——关键字的更多相关文章
- 前端学PHP之面向对象系列第四篇-----关键字
public public表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问 如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有 <?php ...
- 前端学PHP之面向对象系列第六篇——简单图形面积计算器实现
前面的话 本文用面向对象的技术来实现一个简单的图形面积计算器 图形类 //rect.class.php <?php abstract class Shape{ public $name; abs ...
- 前端学PHP之面向对象系列第五篇——对象操作
× 目录 [1]对象克隆 [2]对象比较[3]对象串行化[4]json 前面的话 本文主要介绍面向对象中的一些对象操作 对象克隆 对象复制,又叫对象克隆,可以通过 clone 关键字来完成 在多数情况 ...
- 前端学PHP之面向对象系列第三篇——三大特性
× 目录 [1]封装 [2]继承[3]多态 前面的话 php面向对象编程的三大特性是封装性.继承性和多态性.本文将介绍php的这三大特性 封装 封装就是把对象中的成员属性和成员方法加上访问修饰符( p ...
- javascript面向对象系列第四篇——选项卡的实现
前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...
- 前端学PHP之面向对象系列第二篇——魔术方法
× 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
- javascript面向对象系列第四篇——OOP中的常见概念
前面的话 面向对象描述了一种代码的组织结构形式——一种在软件中对真实世界中问题领域的建模方法.本文将从理论层面,介绍javascript面向对象程序程序(OOP)中一些常见的概念 对象 所谓对象,本质 ...
- 前端工程师技能之photoshop巧用系列第四篇——图片格式
× 目录 [1]图片格式 [2]保存设置 前面的话 对于前端来说,图片格式是需要重要掌握的知识.本文是photoshop巧用系列第四篇——图片格式 图片格式 目前在前端的开发中常用的图片格式有jpg. ...
随机推荐
- linux下的tcp连接超时
最近需要写一个linux下的通信程序, 通信模块用的是Qt的QTcpSocket. 最后程序需要增加一个断网检测, 在windows下调试没问题, 拔网线, 断网口都能马上检测到, 但到了部署到lin ...
- SubVersion Ubuntu
UbuntuサーバにSubversionを入れる Linux, 開発ツール | Ubuntuサーバが無事に動いたので.続いてSubversionを入れてみる. こんな感じの環境を考える. Apa ...
- HTML 上传图片实用小技巧
最近写的项目需要用的上传图片的功能但是浏览器自带的按钮样式实在是不忍直视,肯定要进行修改,网上也有很多方法(自己查....),我这里用了个取巧的方法:就是函数的间接调用 在点击btn的时候让它执行了图 ...
- php+ajax..转
php+ajax 登录注册页面 主要是登录注册功能,前端后台验证没有什么,这个大家可以自己加上去,比如过滤啊,正则啊等 还是先放图吧 这是登录及注册界面 点击注册切换到注册界面,点击登录切换到登录界 ...
- input在标签内设置禁止输入空格
1.通过正则匹配解决问题 此处涉及\s:匹配任意空白符 \S:匹配任意非空白字符 <input type="text" onkeyup="this.value=t ...
- *HDU1846HDU2188 巴什博奕
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 利用DOS批处理实现定时关机操作
10月1放假回来,寝室晚上10:30就停电了,最无法让人理解的是第二天早上8:00才来电.原来晚上电脑都是不关机的,开着WiFi一直到天亮,可是现在不行了,电脑如果一直开着第二天早上起来电脑肯定没电, ...
- Javascript初学篇章_8(事件)
事件 HTML 事件是发生在 HTML 元素上的事情.例如用户点击按钮时,点击也是一个事件.事件可以用于处理表单验证,用户输入,用户行为及浏览器动作,如: 页面加载时触发事件 页面关闭时触发事件 用户 ...
- JSP页面之间互相传值
页面一: <s:if test="#list.sourceId==1"> <a ...
- C#中ToString格式大全
更多资源:http://denghejun.github.io C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5&q ...