php对象中类的继承性访问类型控制

类型的访问控制通过使用修饰符允许开发人员对类中成员的访问进行限制。这是PHP5的新特性,也是OOP语言中的重要特性,大多数OOP语言都已支持此特性。PHP5支持如下三种访问修饰符,在类的封装中我们已经介绍过了两种。在这里总结一下,访问控制修饰符包括public(公有的、默认的)、privat(私有的)和protected(受保护的)三种哦。他们的作用及其之间的区别如下表所示:

①公有的访问修饰符public

使用这种修饰符则类中的成员将没有访问限制,所有的外部成员都可以访问这个类中的成员,在PHP5之前的所有版本中,PHP中类的成员都是public的。

②私有的访问修饰符private

当类中的成员被定义为private,对于同一个类里所有成员都没有访问限制,但对于该类的外部代码是不允许改变甚至操作的,对于该类的子类,也不能访问private修饰的成员。代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?php

    //声明一个类作为父类使用,将它的成员都声明为私有的

    class MyClass {

        private $var1=100;

        private function  printHello(){

            echo "hello<br>";    

        }

    }

    //声明一个Myclass类的子类师徒访问父类中的私有成员

    class MyClass2 extends MyClass{

        function useProperty(){

            echo "输出从父类继承过来的成员属性值".$this ->var1."<br>";

            $this ->printHello();

        }

    }

    $subObj = new MyClass2();

    $subObj -> useProperty();       //调用子类对象中的方法实现对父类私有成员的访问

?>

在上面的代码中声明了一个类MyClass,在类中声明了一个私有的成员属性和一个私有的成员方法,又声明了一个类MyClass2继承类MyClass,并在子类MyClass2中访问父类中的私有成员。但父类中的私有成员只能在它的本类中使用,所以访问出错。

③保护的访问修饰符protected

被修饰为protected的成员,对于该类的子类及子类的子类都有访问权限,可以进行属性、方法的读写操作。但不能被该类的外部代码访问,该子类的外部代码也不具有方额外呢其属性和方法的权限。将上例中父类的访问权限改为protected修饰,就可以在子类中访问父类中的成员了,但在类的外部也是不能访问的,所以也可以完成对对象的封装的目的。代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<?php

    class MyClass {

        protected $var1=100;

        protected function  printHello(){

            echo "hello<br>";    

        }

    }

    //声明一个Myclass类的子类师徒访问父类中的保护成员

    class MyClass2 extends MyClass{

        function useProperty(){

            echo "输出从父类继承过来的成员属性值".$this ->var1."<br>";

            $this ->printHello();

        }

    }

    $subObj = new MyClass2();

    $subObj -> useProperty();       //调用子类对象中的方法实现对父类私有成员的访问

    echo $subObj ->var1;         //试图访问类中受保护的成员,结果出错

?>

在上例中,将类MyClass中的成员使用protected修饰符设置为保护的,就可以在子类中直接访问。但在子类外部去访问protected修饰的成员则出错。

>> 本文固定链接: http://php.ncong.com/php_course/oop/fangwenlei.html

>> 转载请注明: 恩聪php 2014年07月24日 于 恩聪PHP学习教程 发表

php对象中类的继承性访问类型控制

时间: 2024-07-29 15:12:58

php对象中类的继承性访问类型控制的相关文章

python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)

11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= "egon"; ? // 2. 声明立刻定义 var age = 18; 2.变量名命名规范 1.由字母.数字.下划线.$ 组成,但是不能数字开头,也不能纯数字2.严格区分大小写3.不能包含关键字和保留字(以后升级版本要用的关键字).如: abstract.boolean.byte.char.clas

Lua-面向对象中类的构造

在Lua中,我们可以通过table+function来模拟实现类. 而要模拟出类,元表(metatable)和__index元方法是必不可少的. 为一个表设置元表的方法: table = {} metatable = {} setmetatable(table, metatable) 或者 table = setmetatable({},{}) 下面看一个简单的例子: local t = { k1 = "aaa" } local mt = { k2 = "bbb",

访问类型控制(public、private、protected)

访问控制修饰符包括public(公有的.默认的).private(私有的)和protected(受保护的)三种. 1.public    类中的成员没有访问限制,所有的外部成员都可以访问这个类中的成员. 2.private    对于同一个类里的所有成员都没有访问限制,但对于该类的外部代码是不允许改变甚至操作的,对于该类的子类,也不能访问private修饰的成员. 3.protected    对于该类的子类以及子类的子类都有访问权限,可以进行属性.方法的读及写操作.但不能被该类的外部代码访问,

LuaJava学习笔记[2]使用Lua控制Java对象

LuaJava学习笔记 使用Lua控制Java对象 [资源准备] 本次依然使用LuaJava1.1作为工具,你可以到这里进行下载:http://luaforge.net/projects/luajava/.不要忘记将本地库放到项目目录中去.我的工作目录是这样的: 为了方便,我使用Maven进行的项目依赖关联,你也可以将luajava的jar包导入项目中,这两者都是等效的.如果使用的linux进行开发,你的本地库名称应该是一个so文件,这些库文件在链接页面中都可以找到. [源文件] TestObj

面向对象,元类,控制类,对象的创建

""" call 调用的意思 ? 在在对象被调用时 执行 函数 类 自定义元类 的目的 ? 1.可以通过call 来控制对象的创建过程 ? 2.可用控制类的创建过程 """ 自定义一个元类 元类也是一个类 但是需要继承type class MyMeta(type):?self 表示要创建对象的那个类(Person) *args是调用Person类时传入的参数??  def __call__(self, *args, **kwargs):??   

Java——面向对象的特征二:继承性

2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子类就可以获取到. 明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接调用罢了,但是可以间接访问.子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分.构造方法无法被子类继承. extends:子类是对父类功能的“扩展”,明确子类不是父类的子

iOS控制反转(IoC)与依赖注入(DI)的实现

背景 最近接触了一段时间的SpringMVC,对其控制反转(IoC)和依赖注入(DI)印象深刻,此后便一直在思考如何使用OC语言较好的实现这两个功能.Java语言自带的注解特性为IoC和DI带来了极大的方便,要在OC上较好的实现这两个功能,需要一些小小的技巧. 控制反转和依赖注入 控制反转 简单来说,将一个类对象的创建由手动new方式改为从IOC容器内获取,就是一种控制反转,例如我们现在要创建一个ClassA类,则常规方法为 ClassA *a = [ClassA new]; 如果使用控制反转,

Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

Java:对象的强、软、弱和虚引用(转)

1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用.图1为对象应用类层次. 图1 ⑴强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空