php面向对象全攻略(九)访问类型
PHP 类型 访问 面向对象 全攻略
2023-06-13 09:14:13 时间
13.访问类型
类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5的新特性,但却
是OOP语言的一个好的特性。而且大多数OOP语言都已支持此特性。PHP5支持如下3种访
问修饰符
public(公有的、默认的),private(私有的)和protected(受保护的)三种。
public公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)
这个类成员(包括成员属性和成员方法),在PHP5之前的所有版本中,PHP中类的成员都是
public的,而且在PHP5中如果类的成员没有指定成员访问修饰符,将被视为public。
例:public$name;
publicfunctionsay(){};
private私有修改符,被定义为private的成员,对于同一个类里的所有成员是可见的,即
是没有访问限制;但对于该类的外部代码是不允许改变甚至读操作,对于该类的子类,也不
能访问private修饰的成员。
例:private$var1=‘A";//属性
privatefunctiongetValue(){}//函数
protected保护成员修饰符,被修饰为protected的成员不能被该类的外部代码访问。但是
对于该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的
子类都不具有访问其属性和方法的权限。
例:protected$name;
protectedfunctionsay(){};
privateprotectedpublic
同一个类中√√√
类的子类中√√
所有的外部成员√
代码片段
复制代码代码如下:
类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5的新特性,但却
是OOP语言的一个好的特性。而且大多数OOP语言都已支持此特性。PHP5支持如下3种访
问修饰符
public(公有的、默认的),private(私有的)和protected(受保护的)三种。
public公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)
这个类成员(包括成员属性和成员方法),在PHP5之前的所有版本中,PHP中类的成员都是
public的,而且在PHP5中如果类的成员没有指定成员访问修饰符,将被视为public。
例:public$name;
publicfunctionsay(){};
private私有修改符,被定义为private的成员,对于同一个类里的所有成员是可见的,即
是没有访问限制;但对于该类的外部代码是不允许改变甚至读操作,对于该类的子类,也不
能访问private修饰的成员。
例:private$var1=‘A";//属性
privatefunctiongetValue(){}//函数
protected保护成员修饰符,被修饰为protected的成员不能被该类的外部代码访问。但是
对于该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的
子类都不具有访问其属性和方法的权限。
例:protected$name;
protectedfunctionsay(){};
privateprotectedpublic
同一个类中√√√
类的子类中√√
所有的外部成员√
代码片段
<?php
/**
*DefineMyClass
*/
classMyClass{
public$public="Public";
protected$protected="Protected";
private$private="Private";
functionprintHello(){
echo$this->public;
echo$this->protected;
echo$this->private;
}
}
$obj=newMyClass();
echo$obj->public;//Works
echo$obj->protected;//FatalError
echo$obj->private;//FatalError
$obj->printHello();//ShowsPublic,ProtectedandPrivate
/**
*DefineMyClass2
*/
classMyClass2extendsMyClass{
//Wecanredeclarethepublicandprotectedmethod,butnotprivate
protected$protected="Protected2";
functionprintHello(){
echo$this->public;
echo$this->protected;
echo$this->private;
}
}
$obj2=newMyClass2();
echo$obj->public;//Works
echo$obj2->private;//Undefined
echo$obj2->protected;//FatalError
$obj2->printHello();//ShowsPublic,Protected2,notPrivate
?>
代码片段
<?php
/**
*DefineMyClass
*/
classMyClass{
//Contructorsmustbepublic
publicfunction__construct(){}
//Declareapublicmethod
publicfunctionMyPublic(){}
//Declareaprotectedmethod
protectedfunctionMyProtected(){}
//Declareaprivatemethod
privatefunctionMyPrivate(){}
//Thisispublic
functionFoo(){
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();
}
}
$myclass=newMyClass;
$myclass->MyPublic();//Works
$myclass->MyProtected();//FatalError
$myclass->MyPrivate();//FatalError
$myclass->Foo();//Public,ProtectedandPrivatework
/**
*DefineMyClass2
*/
classMyClass2extendsMyClass{
//Thisispublic
functionFoo2(){
$this->MyPublic();
$this->MyProtected();
$this->MyPrivate();//FatalError
}
}
$myclass2=newMyClass2;
$myclass2->MyPublic();//Works
$myclass2->Foo2();//PublicandProtectedwork,notPrivate
?>
另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类
被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
例如,如果父类方法的访问权限是protected那么子类中要覆盖的权限就要是protected
和public,如果父类的方法是public那么子类中要覆盖的方法只能也是public,总之子类中的
方法总是要高于或等于父类被覆盖方法的访问权限。
相关文章
- 如何理解php是弱类型语言
- 【说站】php变量的引用赋值使用
- 【PHP】英文博客专栏PHP快速入门个人笔记
- PHP reset():将数组内部指针指向数组的第一个元素
- MySQL登录安全之PHP实现(php登录mysql)
- 深入学习:PHP如何配置MySQL(php如何配置mysql)
- 基于PHP的MySQL访问方式(php访问mysql)
- 快速访问MSSQL数据库:PHP实现(php访问mssql)
- PHP连接MSSQL库的方法(php链接mssql)
- 利用PHP操作Redis变得更简单(php中redis的使用)
- php绘制图片验证码
- PHP实现Oracle数据库连接(php支持oracle)
- 使用Linux命令行来优化你的PHP开发(linux命令行php)
- PHP访问MSSQL的挣扎:无可奈何.(找不到php mssql)
- PHP操作MSSQL——实现高效读写(php读写mssql)
- PHP连接MSSQL:一个新的开发方式(php 联接mssql)
- 服务器深入比较:PHP数据库与MSSQL服务器(php数据库和mssql)
- PHP如何访问MS SQL服务器(php怎么访问mssql)
- MySQL和PHP:构建更先进的开发体系(mysql 和php)
- 以原生PHP类库操作Redis数据库(原生php操作redis)
- php下实现在指定目录搜索指定类型文件的函数
- PHP中防止直接访问或查看或下载config.php文件的方法
- 用PHP来计算某个目录大小的方法
- Mac下搭建php开发环境教程
- 云主机搭建php+mysql运行环境教程(护卫神PHP套件)