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等关键字用法详解的更多相关文章

  1. Java中public,private,protected,和默认的区别

    Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...

  2. ava下static关键字用法详解

    Java下static关键字用法详解 本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家. Static关键字可以修饰什么? 从以下测试可以看出, static ...

  3. Python中第三方库Requests库的高级用法详解

    Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...

  4. php class中public,private,protected的区别,以及实例

    一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型 ...

  5. Java并发编程1--synchronized关键字用法详解

    1.synchronized的作用 首先synchronized可以修饰方法或代码块,可以保证同一时刻只有一个线程可以执行这个方法或代码块,从而达到同步的效果,同时可以保证共享变量的内存可见性 2.s ...

  6. JavaScript中return的用法和this的用法详解

    JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对this和函数中的return的用法和意思理解的比较模糊,这里写一篇博客跟大家一起探讨一下return和this的 ...

  7. Delphi常用关键字用法详解

    本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: ? 1 2 3 4 5 6 7 8 9 10 //它使得你能够创建一个新变量, ...

  8. java中public private protected default的区别

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...

  9. php 中 public private protected的区别

    public 子类,外部都可调用. protected 子类可以调用,外部不可以调用. private 子类不可以调用,外部不可以调用. <?php class AA { public func ...

随机推荐

  1. 使用Angular Router导航基础

    名称 简介 Routes 路由配置,保存着那个URL对应着哪个组件,以及在哪个RouterOulet中展示组件. RouterOutlet 在HTML中标记路由内容呈现位置的占位符指令. Router ...

  2. 十三、Hadoop学习笔记————Hive安装先决条件以及部署

    内嵌模式,存储于本地的Derby数据库中,只支持单用户 本地模式,支持多用户多会话,例如存入mysql 下载解压hive后,进到conf路径,将模板拷贝 出现该错误表示权限不够 该目录未找到 新建一个 ...

  3. Thymleaf——工作笔记本

    Thymleaf(工作笔记本)  1,循环遍历 th:each="li,information:${information}"   2,文本  th:text="${nu ...

  4. c#游戏进程杀手

    我认为写博客还是比较重要的,特别是短时间写出一个含有新知识点的软件.这样总结下这次编程经验和再捋顺一下这次编程思路.首先来谈谈为什么想做这个小程序,一是感觉自己太贪玩想控制一下,二是也锻炼下自己的编程 ...

  5. Thinkphp导入外部类的方法

    相信很多人在使用TP时候都苦恼使用外部类各种不成功 下面为大家详细介绍下引用方法和注意细节 手动加载第三方类库 由于第三发类库没有具体的命名空间,所以需要使用以下几种方法手动导入 1.import方法 ...

  6. vue+echarts 动态绘制图表以及异步加载数据

    前言 背景:vue写的后台管理,需要将表格数据绘制成图表(折线图,柱状图),图表数据都是通过接口请求回来的. 安装 cnpm install echarts --s (我这里用了淘宝镜像,不知道同学自 ...

  7. 如何编写gitignore文件

    原文链接:https://www.cnblogs.com/jingtyu/p/6831772.html 为什么要有.gitignore文件 项目中经常会生成一些Git系统不需要追踪(track)的文件 ...

  8. openstack高可用haproxy配置

    #openstack高可用haproxy配置openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #openstack高可 ...

  9. JavaWeb框架_Struts2_(七)----->文件的上传和下载

    这个章节是Struts2框架应用最广泛的三个版块(上传下载.国际化.校验输入)之一,所以这一版块的学习还蛮重要的. 1. 章节目录 Struts2文件上传 单文件上传 拦截器实现文件过滤 文件上传常量 ...

  10. 关于PHP 采集类

    伟大的筒子们,我们需要经常采集. 不知道大家每次采集的时候会不会烦躁,不用八爪鱼,不用PYTHON 是不是感到手无力,看到正则匹配每次匹配不对,一换采集内容就是头疼,重新拼写正则? 不要说是高手 ,就 ...