PHP新手之学习类与对象(3)
四、访问控制
对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。
1、对类成员的访问控制
类成员都必须使用关键字public、protected 或 private 进行定义
Example#1 声明类成员
<?php
/**
* Define MyClass
*/
class MyClass {
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private'; function printHello() {
echo $this -> public;
echo $this -> protected;
echo $this -> private;
}
}
$obj = new MyClass();
echo $obj -> public; // 这行能被正常执行
echo $obj -> protected; // 这行会产生一个致命错误
echo $obj -> private; // 这行也会产生一个致命错误
$obj -> printHello(); // 输出 Public、Protected 和 Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass {
// 可以对 public 和 protected 进行重定义,但 private 而不能
protected $protected = 'Protected2'; function printHello() {
echo $this -> public;
echo $this -> protected;
echo $this -> private;
}
} $obj2 = new MyClass2();
echo $obj -> public; // 这行能被正常执行
echo $obj2 -> private; // 未定义 private
echo $obj2 -> protected; // 这行会产生一个致命错误
$obj2 -> printHello(); // 输出 Public、Protected2,但不会输出 Private class Bar {
public function test() {
$this -> testPrivate();
$this -> testPublic();
} public function testPublic() {
echo "Bar::testPublic\n";
} private function testPrivate() {
echo "Bar::testPrivate\n";
}
} class Foo extends Bar {
public function testPublic() {
echo "Foo::testPublic\n";
} private function testPrivate() {
echo "Foo::testPrivate\n";
}
}
$myFoo = new foo();
$myFoo -> test(); // Bar::testPrivate
// Foo::testPublic
?>
Note: 为了兼容性考虑,在 PHP 4 中使用 var 关键字对变量进行定义的方法在 PHP 5 中仍然有效(只是作为 public 关键字的一个别名)。在 PHP 5.1.3 之前的版本,该语法会产生一个 E_STRICT 警告。
2、对方法的访问控制
类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。
Example#2 声明类中的方法
<?php
/**
* Define MyClass
*/
class MyClass {
// 构造函数必须是 public
public function __construct() {
}
// 声明一个 public 的方法
public function MyPublic() {
}
// 声明一个 protected 的方法
protected function MyProtected() {
}
// 声明一个 private 的方法
private function MyPrivate() {
}
// 这个方法也是 public 的
function Foo() {
$this -> MyPublic();
$this -> MyProtected();
$this -> MyPrivate();
}
} $myclass = new MyClass;
$myclass -> MyPublic(); // 这行能被正常执行
$myclass -> MyProtected(); // 这行会产生一个致命错误
$myclass -> MyPrivate(); // 这行会产生一个致命错误
$myclass -> Foo(); // Public、Protected 和 Private 都被调用了 /**
* Define MyClass2
*/
class MyClass2 extends MyClass {
// This is public
function Foo2() {
$this -> MyPublic();
$this -> MyProtected();
$this -> MyPrivate(); // 这行会产生一个致命错误
}
} $myclass2 = new MyClass2;
$myclass2 -> MyPublic(); // 这行能被正常执行
$myclass2 -> Foo2(); // Public 和 Protected 都被调用了,但 Private 不会被调用 ?>
PHP新手之学习类与对象(3)的更多相关文章
- PHP新手之学习类与对象(2)
二.自动加载对象 很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表. 在 PHP 5 中,不再需要 ...
- PHP新手之学习类与对象(1)
本文介绍的是PHP程序设计语言中类和对象的基本知识,适合初学者阅读,希望对你有帮助,一起来看. PHP 5 引入了新的对象模型(Object Model).完全重写了 PHP 处理对象的方式,允许更佳 ...
- PHP新手之学习类与对象(4)
五.范围解析操作符(::) 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员.方法和常量,还可以用于覆盖类中的成员和方法. 当在类的外 ...
- 新手C#类、对象、字段、方法的学习2018.08.05
类:具有相似属性和方法的对象的集合,如“人”是个类. 对象(实例):对象是具体的看得见摸得着的,如“张三”是“人”这个类的对象.(new Person()开辟了堆空间中,=开辟了栈空间,变量P存放在该 ...
- No1_7.类和对象_Java学习笔记
一.面向对象的特点:a.封装:封装是面向对象的核心思想,将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想: 保证了类内部数据的完整性,应用该类的用户不能轻易直接操纵 ...
- 零基础学习python_类和对象(36-40课)
今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...
- python学习-class对象
# 面向对象 python,java,c## 面向过程 C # 类和对象# 类 类型类别.类别 物以类聚 一类事物# 班级.人类.动物类.车.学生类.老师类.手机.电脑# 统称 == 共同特性# 不具 ...
- java学习-初级入门-面向对象④-类与对象-类与对象的定义和使用2
我们继续学习类与对象,上一篇我们定义了 坐标类(Point), 这次我们在Point的基础上,创建一个圆类(Circle). 案例:创建一个圆类 题目要求: 计算圆的周长和面积:求判断两个圆的位置关 ...
- java学习-初级入门-面向对象③-类与对象-类与对象的定义和使用1
今天学习类与对象.先大致解释一下类与对象的含义. 对象:object 有物体这一概念,一切皆对象(物体),对象由静态的属性和动态的行为组成. 比如说水杯: 水杯的静态属性:材质,容量,质量,颜色 动态 ...
随机推荐
- SQL2005附加数据库时遇到的问题:用户组或角色在当前数据库已存在
一次 附加备份数据库的 mdf 文件 成功后 创建登陆用户 但是 无法映射该用户的 对应数据库 出现 用户组或角色在当前数据库已存在 的问题 首先介绍一下sql server中“ ...
- centos 安装FTP server详情(转)
centos 安装FTP server详情 分类: linux 2013-12-27 16:45 227人阅读 评论(0) 收藏 举报 我们这里以安装vsftpd 服务器端为例子: 1.进入到cent ...
- mutilple output reduce cannot write
package org.lukey.hadoop.classifyBayes; import java.io.BufferedReader; import java.io.IOException; i ...
- PAT (Advanced Level) 1066. Root of AVL Tree (25)
AVL树的旋转.居然1A了.... 了解旋转方式之后,数据较小可以当做模拟写. #include<cstdio> #include<cstring> #include<c ...
- 基于Verilog HDL 各种实验
菜鸟做的的小实验链接汇总: 1.基于Verilog HDL 的数字时钟设计 2.乘法器 3.触发器(基本的SR触发器.同步触发器.D触发器) 4.基于Verilog HDL的ADC ...
- reactor 类库,基于事件编程
https://github.com/reactor https://github.com/reactor/reactor-samples/ https://github.com/ReactiveX/ ...
- 在Delphi中使用C++对象(转)
源:http://blog.csdn.net/henreash/article/details/7352335 Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难 ...
- 强制修改mysql 中root的密码
/etc/init.d/mysqld stop (service mysqld stop )/usr/bin/mysqld_safe --skip-grant-tables另外开个SSH连接[ro ...
- HDU 1811 Rank of Tetris 拓补排序+并查集
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) [ ...
- ARM架构解析
ARM架构解析 (2014-11-23 21:56:53) 转载▼ 标签: francis_hao arm架构 arm核 soc 分类: MCU 先来谈一下ARM的发展史:1978年12月5日,物理学 ...