PHP中public,private,protected,abstract等关键字用法详解
PHP中常用的关键字
在PHP中包含了很多对函数和类进行限制的关键字,常用的通常有abstract,final,interface,public,protected,private,static等等,下面我们就将对这些进行分析整理各个的用法。
变量与方法的关键字public,private,protected
public的权限最大,既可以让子类使用,也可以支持实例化之后的调用,
protected表示的是受保护的,访问的权限是只有在子类和本类中才可以被访问到
private 表示的是私有,只能够是在当前的类中可以被访问到
<?php //
/**
* Define MyClass
*/
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private'; public function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
protected function pro_test(){
var_dump(1);
}
} $obj = new MyClass();
echo $obj->public; // 这行能被正常执行
//echo $obj->protected; // 这行会产生一个致命错误
//echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
$obj->pro_test();//直接报错
?>
变量与方法的关键字static
static的作用就是能够实现值或者方法在类中不需实例化的情况下调用,同时static修饰的变量具有与值存储的功能,例如我们不使用static运行的结果如下:
<?php
function test(){
$var=1;
echo $var."</br>";
$var++;
}
test();//
test();//
test();//
?>
如果我们给变量加上static那么就会变成这样
<?php
function test(){
static $var=1;
echo $var."</br>";
$var++;
}
test();//
test();//
test();//
?>
这里可能不能够体会到PHP这样做的好处,那么我们就先来假设一下读者也熟悉JS,在JS中是没有static这个关键字的,所以如果我们要来实现一个具有能够保存每一次程序运算结果作为下一次运算的依据的一个程序我们需要这样来写。
var glo=0;
function test(){
glo++;
document.writeln(glo);
}
test();
test();
test();
这样就会把glo泄漏到全局变量中,如果生成的变量比较多,就会导致内存泄露(内存泄漏所指代的就是变量占用过多的内存空间没有别释放)
<script>
var glo=0;
function test(){
glo++;
document.writeln(glo);
}
test();//
test();//
test();// 3
</script>
所以相比于在没有定义static的语言中,它具有一个优势是保持变量,不泄露内存,也不容易导致全局变量被误用(因为作用域不在全局)
$age=0;
$age++; function test1() {
static $age = 100;
$age++;
echo $age."</br>";
} function test2() {
static $age = 1000;
$age++;
echo $age."</br>";
} test1(); // 101
test2(); // 1001
class与方法的关键字final
final只能够用来修饰class与function,使用了final之后就不能够被继承,例如如下的代码就会直接报错
class BaseClass {
public $public = '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";
}
}
特殊关键字interface,abstract
interface的意义在于规范编程的风格,设想一下就是如果是实现了一个接口那么我们在使用这个接口类的时候就必须要实现里面的方法,起到了统一命名的作用。
class是可以多继承接口的,接口与接口之间的单继承是通过extends来实现的,class与接口之间的关系确立是通过implements
示例代码:
<?php
interface testA{
function funcA();
}
interface testB{
function funcB();
}
interface testC extends testA {
function funcC();
}
class run implements testC ,testB {
public function funcA()
{
// TODO: Implement funcA() method.
}
public function funcB()
{
// TODO: Implement funcB() method.
}
public function funcC()
{
// TODO: Implement funcC() method.
}
}
?>
abstract的作用跟interface其实是一样的,但是在interface中所有的方法都是必须要实现的,但是在abstract修饰的类中,可以有一个或者是多个的abstract修饰方法,所以我们可以这样理解,interface就是abstract的一种特殊情况(当所有的方法都是抽象方法,都是必须要实现的)。abstract有以下的这些特征:
1. 只要类中有至少一个方法使用了abstract关键字,那么这个类是abstract,要加上相应的关键字
2. 抽象方法,只有方法的声明部分,没有方法体。
但是在我看来,abstract在实际的应用中有这样的几种场景
1. 多人编程的时候规范公共部分的命名规则(不做任何说明,原理跟interface一样)
2. 实现不让父级直接实例化使用
样式代码如下:
<?php abstract class shopping
{
public function buy()
{
echo "buy";
} public function loan()
{
echo "loan";
}
} class leslieBuy extends shopping
{ } //$test1=new shopping;//直接语法错误
$leslieSie = new leslieBuy;
$leslieSie->loan();//打印出loan
?>
PHP中public,private,protected,abstract等关键字用法详解的更多相关文章
- Java中public,private,protected,和默认的区别
Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...
- ava下static关键字用法详解
Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static ...
- Python中第三方库Requests库的高级用法详解
Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...
- php class中public,private,protected的区别,以及实例
一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型 ...
- Java并发编程1--synchronized关键字用法详解
1.synchronized的作用 首先synchronized可以修饰方法或代码块,可以保证同一时刻只有一个线程可以执行这个方法或代码块,从而达到同步的效果,同时可以保证共享变量的内存可见性 2.s ...
- JavaScript中return的用法和this的用法详解
JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对this和函数中的return的用法和意思理解的比较模糊,这里写一篇博客跟大家一起探讨一下return和this的 ...
- Delphi常用关键字用法详解
本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: ? 1 2 3 4 5 6 7 8 9 10 //它使得你能够创建一个新变量, ...
- java中public private protected default的区别
1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...
- php 中 public private protected的区别
public 子类,外部都可调用. protected 子类可以调用,外部不可以调用. private 子类不可以调用,外部不可以调用. <?php class AA { public func ...
随机推荐
- Python [习题] 字典排序
[习题] 对此字典分别按照value 和key 如何排序? dic1 = {'and':40, 'a':54, 'is':60, 'path':139, 'the':124, 'os':49} In ...
- 通过hadoop + hive搭建离线式的分析系统之快速搭建一览
最近有个需求,需要整合所有店铺的数据做一个离线式分析系统,曾经都是按照店铺分库分表来给各自商家通过highchart多维度展示自家的店铺经营 数据,我们知道这是一个以店铺为维度的切分数据,非常适合目前 ...
- 秒表计时器以及Stopwatch
Stopwatch:秒表计时器,用来记录程序的运行时间,通常用来测试代码在时间上的执行效率.(需要引用:System.Diagnostics.) Stopwatch sw=new Stopwatch( ...
- 《java.util.concurrent 包源码阅读》27 Phaser 第一部分
Phaser是JDK7新添加的线程同步辅助类,作用同CyclicBarrier,CountDownLatch类似,但是使用起来更加灵活: 1. Parties是动态的. 2. Phaser支持树状结构 ...
- Javascript-基础概念总结
[作用域]javascript中的作用域可以理解为一个语句执行的环境大小,有全局的作用域,函数作用域和eval作用域.在JS中没有块级作用域.讲到作用域,不得不讲执行环境,执行环境在JS中是最为重要的 ...
- 【原创精品】程序员最强大的利器——电子笔记本的思考(1)(ver0.3)
[原创精品]程序员最强大的利器,本文以下内容全都是作者EverStenis(胡佳吉)的原创,未经授权不得转载,抄袭必究. 我想问大家一个问题,对于我们程序员来说,在我们的武器工具库中,最强大的一件利器 ...
- 【javaFX学习】(二) 控件手册
这里写的控件可能不是所有的控件,但是应该是比较齐全并足够用的了,后面还有图表类的,3d模型类,放在后面来写吧,太多了.javafx的功能比以前想象中的要强大.而且也很方便,所有的控件写完后再用Scen ...
- thinkphp中各字母代表的发放和具体实例
hinkphp单字母函数使用指南A方法 A方法用于在内部实例化控制器,调用格式:A('[项目://][分组/]模块','控制器层名称') 最简单的用法: $User = A('User'); 复制代码 ...
- 浅谈使用git进行版本控制
小编在学习可视化的时候,接触到git,所以这里写一下关于GitHub的有关知识,写这个的目的还是巩固自己的学习,一方面可以提高自己,另一方面回头看一下,有什么更深层次的东西还可以再记录. 首先说一下版 ...
- Nginx如何配置虚拟主机?
注意,该环境是依赖于http://www.php20.com/forum.php?m ... &extra=page%3D1 基础上进行配置.默认不具备这些文件 .下面是增加一个mytest点 ...