PHP实践之路(目录索引)
类与对象(2)
1、构造函数
a、构造函数的作用主要是初始化对象信息,每次创建新对象时都会调用构造函数
b、构造函数模式为
void __construct($args)
c、为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数
d、如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用
parent::__construct()。子类和父类的说法是在继承中有的,继承我们将在后面讨论(这个实验我们将在继承中体现)
我们来举个例子
<?php
//换行输出
function println($var){
echo $var;
echo "<br />";
}
//账户
class Account{
private $username;
private $password;
//构造函数
function __construct($name,$pass){
println("execute construct...");
$this->username=$name;
$this->password=$pass;
}
function printInfo(){
println("username:".$this->username);
println("password:".$this->password);
}
}
$account=new Account("cyxl","123"); //输出:execute construct...
$account->printInfo();
/**输出
username:cyxl
password:123
*/
class Account2{
private $username;
private $password;
//旧式同名构造函数
function Account2($name,$pass){
println("execute construct...");
$this->username=$name;
$this->password=$pass;
}
function printInfo(){
println("username:".$this->username);
println("password:".$this->password);
}
}
$account=new Account2("jack","123"); //输出:execute construct...
$account->printInfo();
/**输出
username:jack
password:123
*/
?>
2、析构函数
a、析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行(自PHP5开始引入析构函数)
b、父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。(这个实验我们将在继承中体现)
c、析构函数即使在使用exit()终止脚本运行时也会被调用。在析构函数中 调用exit()将会中止其余关闭操作的运行
实验时间
<?php
//换行输出
function println($var){
echo $var;
echo "<br />";
}
//账户
class Account{
private $username;
private $password;
//构造函数
function __construct($name,$pass){
println("execute construct...");
$this->username=$name;
$this->password=$pass;
}
function printInfo(){
println("username:".$this->username);
println("password:".$this->password);
}
function __destruct(){
println("execute destruct...");
}
}
$account=new Account("cyxl","123"); //输出:execute construct...
///exit(); //如果此处调用exit()函数,脚本将终止执行,但对象的析构函数还是会执行输出:execute destruct...
$account->printInfo();
/**输出
username:cyxl
password:123
*/
//脚本执行完后,系统自动调用析构函数输出:execute destruct...
?>
3、继承
a、继承也就是子类继承自父类,子类将会继承父类的所有公有和保护方法,但是子类的方法会覆盖父类的方法。这个可以联系实际情况加以理解
b、一个子类只可以继承一个父类
c、使用final关键字修饰的类不能被继承,使用final修饰的方法不能被覆盖
好了,我们做做实验吧
<?php
//换行输出
function println($var){
echo $var;
echo "<br />";
}
class Father{
private $name;
protected $money;
public $friends;
//构造函数初始化对象
function __construct(){
println("father construct executed...");
$this->name="father";
$this->money=10000.0; //父亲的初始财富值,也许是他爸爸留给他的
$this->friends=array("jack","lily");
}
function work(){
println("father working..");
$this->money+=10; //父亲通过工作挣钱
}
function printInfo(){
println("name:".$this->name);
println("money:".$this->money);
echo "friends:";
foreach($this->friends as $friend){
echo $friend." ";
}
echo "<br />";
}
function __destruct(){
println("father gone");
}
}
class Sun extends Father{
private $name;
private $other;
function __construct(){
println("sun construct executed...");
parent::__construct(); //如果没有这行显示的调用父类的构造函数,那么父类的构造函数将不会执行
$this->name="sun"; //儿子自己的名字
$this->other="somthing else";
}
function work(){
println("sun working..");
$this->money+=20; //儿子继承了父亲的财产,通过自己挣钱使财富值增加了(儿子挣钱的能力比父亲强)
}
//儿子有自己的朋友
function makeFriends(){
$this->friends=array("mike","tom","bake");
}
function printInfo(){
println("name:".$this->name);
println("money:".$this->money);
println("other:".$this->other);
echo "friends:";
foreach($this->friends as $friend){
echo $friend." ";
}
echo "<br />";
}
function __destruct(){
parent::__destruct();
println("sun gone");
}
}
//定义父亲对象
$father=new Father();
$father->work();
$father->printInfo();
println("========================");
//定义儿子对象,很多属性都继承自父亲
$sun=new Sun();
$sun->printInfo();
println("========================");
$sun->work();
$sun->makeFriends();
$sun->printInfo();
println("========================");
//接下来是系统自动销毁对象
?>
以上程序的输出结果为
father construct executed...
father working..
name:father
money:10010
friends:jack lily
========================
sun construct executed...
father construct executed...
name:sun
money:10000
other:somthing else
friends:jack lily
========================
sun working..
name:sun
money:10020
other:somthing else
friends:mike tom bake
========================
father gone
sun gone
father gone
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
深入PHP面向对象模式与实践第2版,是一本学习php面向对象知识的不可多得的一本好书。
首先介绍了PHP的OO特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述了模式的概念,展示了如何在PHP中实现几个关键的...
深入PHP 面向对象、模式与实践.rar
《深入PHP:面向对象、模式与实践(第3版)》全书源码,有利于深入学习PHP,快速掌握PHP高级技术
深入PHP面向对象 模式与实践第三版号称是php中的圣经,
首先介绍了php的oo特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述了模式的概念,展示了如何在php中实现几个关键的...
深入PHP面向对象、模式与实践(第2版).part3深入PHP面向对象、模式与实践(第2版).part3
深入PHP面向对象、模式与实践_第3版_高清PDF(附完整源码),高清PDF,书上所有代码均有附带在压缩包内
PHP面向对象模式是怎么一回事?那就深入并实践一下
深入PHP:面向对象、模式与实践,php面向对象设计,欢迎大家下载
由浅入深详细精炼阐述php面向对象及设计模式,适合新手老手,真正的php宝典
深入PHP面向对象_模式与实践(第2版)中文完整版 下载地址 http://download.csdn.net/source/2479944 http://download.csdn.net/source/2479976
《深入PHP》是由人民邮电出版社出版的书籍,作者(美)赞德斯彻书 名: 深入PHP 作 者:(美)赞德斯彻 ,陈浩,吴孙滨,胡丹 译 出版社: 人民邮电出版社 出版时间: 2010-5-1 ISBN: 9787115225788 开本: 16开 定价...
首先介绍了php的oo特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、异常处理、对象克隆等高级主题。然后介绍了设计模式,阐述了模式的概念,展示了如何在php中实现几个关键的...
书在内容上每个段落先提出问题,给出实现,...本节内容东坡小编为大家整理带来的是一份pdf高清扫描版,且内容完整的中文版深入PHP面向对象模式与实践(第三版),需要查阅的朋友只需点击本文相应的下载地址进行下载即可!
深入PHP:面向对象、模式与实践(第三版)高清PDF和完整源码.rar
深入PHP++面向对象、模式与实践_2017英文版+最新中文版(附源码)
买了这本书,感觉很不错,但是没办法天天带着这本书,就搞了电子版本的,原先是没有目录的,看起来很不方便,又找了一个有目录的,结合代码,方便大家
目录: 第一部分 介绍第1章 PHP:设计与管理第二部分 对象第2章 PHP与对象第3章 对象基础第4章 高级特性第5章 对象工具第6章 对象与设计第三部分 模式第7 章 什么是设计模式?为何使用它们第8章 模式原则第9章 生成...
深入PHP:面向对象、模式与实践(第三版)高清PDF和完整源码