详谈PHP中public,private,protected,abstract等关键字的相关用法
内容导读
收集整理的这篇技术教程文章主要介绍了详谈PHP中public,private,protected,abstract等关键字的相关用法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4548字,纯文字阅读大概需要7分钟。
内容图文
下面小编就为大家分享一篇详谈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运行的结果如下:
<?phpfunction test(){ $var=1; echo $var."</br>"; $var++;}test();// 1test();// 1test();// 1?>
如果我们给变量加上static那么就会变成这样
<?phpfunction test(){ static $var=1; echo $var."</br>"; $var++;}test();// 1test();// 2test();// 3?>
这里可能不能够体会到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();// 1 test();// 2 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(); // 101test2(); // 1001
class与方法的关键字final
final只能够用来修饰class与function,使用了final之后就不能够被继承,例如如下的代码就会直接报错
class BaseClass { public $public = 'Public'; function test() { echo "BaseClass::test() calledn"; } final public function moreTesting() { echo "BaseClass::moreTesting() calledn"; }}class ChildClass extends BaseClass { public function moreTesting() { echo "ChildClass::moreTesting() calledn"; }}
特殊关键字interface,abstract
interface的意义在于规范编程的风格,设想一下就是如果是实现了一个接口那么我们在使用这个接口类的时候就必须要实现里面的方法,起到了统一命名的作用。
class是可以多继承接口的,接口与接口之间的单继承是通过extends来实现的,class与接口之间的关系确立是通过implements
示例代码:
<?phpinterface 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. 实现不让父级直接实例化使用
样式代码如下:
<?phpabstract 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等关键字的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持Gxl网。
您可能感兴趣的文章:
PHP让数组中有相同值的组成新的数组实例讲解
解决PHP字符串长度不一致的问题详解
命令行执行php脚本中的$argv和$argc配置方法_php实例
以上就是详谈PHP中public,private,protected,abstract等关键字的相关用法的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的详谈PHP中public,private,protected,abstract等关键字的相关用法全部内容,希望文章能够帮你解决详谈PHP中public,private,protected,abstract等关键字的相关用法所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。