博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 面向对象
阅读量:5126 次
发布时间:2019-06-13

本文共 4585 字,大约阅读时间需要 15 分钟。

引用:

PHP 类定义

实例:

1 
url = $par;10 }11 12 function getUrl(){13 echo $this->url . PHP_EOL;14 }15 16 function setTitle($par){17 $this->title = $par;18 }19 20 function getTitle(){21 echo $this->title . PHP_EOL;22 }23 }24 ?>

变量 $this 代表自身的对象。

PHP_EOL 为换行符。


 

PHP 中创建对象

类创建后,我们可以使用 new 运算符来实例化该类的对象:

1 $runoob = new Site;2 $taobao = new Site;3 $google = new Site;

以上代码我们创建了三个对象,三个对象各自都是独立的,接下来我们来看看如何访问成员方法与成员变量。

调用成员方法

在实例化对象后,我们可以使用该对象调用成员方法,该对象的成员方法只能操作该对象的成员变量:

完整代码如下:

1  
url = $par;10 }11 12 function getUrl(){13 echo $this->url . PHP_EOL;14 }15 16 function setTitle($par){17 $this->title = $par;18 }19 20 function getTitle(){21 echo $this->title . PHP_EOL;22 }23 }24 25 $runoob = new Site;26 $taobao = new Site;27 $google = new Site;28 29 // 调用成员函数,设置标题和URL30 $runoob->setTitle( "菜鸟教程" );31 $taobao->setTitle( "淘宝" );32 $google->setTitle( "Google 搜索" );33 34 $runoob->setUrl( 'www.runoob.com' );35 $taobao->setUrl( 'www.taobao.com' );36 $google->setUrl( 'www.google.com' );37 38 // 调用成员函数,获取标题和URL39 $runoob->getTitle();40 $taobao->getTitle();41 $google->getTitle();42 43 $runoob->getUrl();44 $taobao->getUrl();45 $google->getUrl();46 ?>

执行以上代码,输出结果为:

菜鸟教程淘宝Google 搜索www.runoob.comwww.taobao.comwww.google.com

PHP 构造函数

构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。

PHP 5 允许开发者在一个类中定义一个方法作为构造函数,语法格式如下:

 void __construct ([ mixed $args [, $... ]] ) 

在上面的例子中我们就可以通过构造方法来初始化 $url 和 $title 变量:

1 function __construct( $par1, $par2 ) {2    $this->url = $par1;3    $this->title = $par2;4 }

现在我们就不需要再调用 setTitle 和 setUrl 方法了

1 
url = $par1; 9 $this->title = $par2;10 }11 /* 成员函数 */12 function setUrl($par){13 $this->url = $par;14 }15 16 function getUrl(){17 echo $this->url . PHP_EOL;18 }19 20 function setTitle($par){21 $this->title = $par;22 }23 24 function getTitle(){25 echo $this->title . PHP_EOL;26 }27 }28 29 $runoob = new Site('www.runoob.com', '菜鸟教程');30 $taobao = new Site('www.taobao.com', '淘宝');31 $google = new Site('www.google.com', 'Google 搜索');32 33 // 调用成员函数,获取标题和URL34 $runoob->getTitle();35 $taobao->getTitle();36 $google->getTitle();37 38 $runoob->getUrl();39 $taobao->getUrl();40 $google->getUrl();41 ?>

运行结果:

菜鸟教程淘宝Google 搜索www.runoob.comwww.taobao.comwww.google.com

 


方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

实例中重写了 getUrl 与 getTitle 方法:

1 function getUrl() {2    echo $this->url . PHP_EOL;3    return $this->url;4 }5    6 function getTitle(){7    echo $this->title . PHP_EOL;8    return $this->title;9 }

访问控制

PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

1     public(公有):公有的类成员可以在任何地方被访问。2     protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。不能被子类重写3     private(私有):私有的类成员则只能被其定义所在的类访问。不能被子类重写,子类重写无效,运行不会报错.

属性的访问控制

类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。

1 
MyPublic();23 $this->MyProtected();24 $this->MyPrivate();25 }26 }27 28 $myclass = new MyClass;29 $myclass->MyPublic(); // 这行能被正常执行30 $myclass->MyProtected(); // 这行会产生一个致命错误31 $myclass->MyPrivate(); // 这行会产生一个致命错误32 $myclass->Foo(); // 公有,受保护,私有都可以执行33 34 35 /**36 * Define MyClass237 */38 class MyClass2 extends MyClass39 {40 // 此方法为公有41 function Foo2()42 {43 $this->MyPublic();44 $this->MyProtected();45 $this->MyPrivate(); // 这行会产生一个致命错误46 }47 }48 49 $myclass2 = new MyClass2;50 $myclass2->MyPublic(); // 这行能被正常执行51 $myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行

 

1 
testPrivate();14 $this->testPublic();15 }16 17 public function testPublic() {18 echo "Bar::testPublic\n";19 }20 21 private function testPrivate() {22 echo "Bar::testPrivate\n";23 }24 }25 26 class Foo extends Bar27 {28 public function testPublic() {29 echo "Foo::testPublic\n";30 }31 32 private function testPrivate() {33 echo "Foo::testPrivate\n";34 }35 }36 37 $myFoo = new foo();38 $myFoo->test();39 // Bar::testPrivate40 // Foo::testPublic41 ?>

 


Static 关键字

声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。

自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static。

1 
my_static; //静态属性不能这样调用11 }12 }13 14 print Foo::$my_static . PHP_EOL; //foo15 $foo = new Foo(); //foo16 17 print Foo::staticValue() . PHP_EOL; //foo18 print $foo->staticValue() . PHP_EOL; //foo19 print $foo->staticValue2() . PHP_EOL; //报错20 ?>

打印结果:

1 
staticValue() . PHP_EOL; //foo14 ?>

 

 

转载于:https://www.cnblogs.com/haima/p/9393778.html

你可能感兴趣的文章
【02】Kubernets:使用 kubeadm 部署 K8S 集群
查看>>
Java概览(java语言编程艺术笔记)
查看>>
Laravel框架一:原理机制篇
查看>>
链表题目汇总(python3)
查看>>
Vijos——T 1629 八
查看>>
MySQL 表和列的注释
查看>>
linux shell if
查看>>
优秀的Android资源
查看>>
gdb调试
查看>>
数论考试题(b) 求约数的约数的最大个数
查看>>
tcp/ip协议
查看>>
python函数-基础知识
查看>>
BFS HDOJ 1242 Rescue
查看>>
oppo手机使用应用沙盒动态修改硬件数据
查看>>
MySQL学习(三)
查看>>
HTML 快递打印模板
查看>>
02使用常规步骤编译NanoPiM1Plus的Android4.4.2
查看>>
柯理化
查看>>
linux rz批量上传
查看>>
River Hopscotch-[二分查找、贪心]
查看>>