首页  >  文章  >  后端开发  >  PHP面向对象编程——基本实践DAY 2

PHP面向对象编程——基本实践DAY 2

WBOY
WBOY原创
2016-07-29 09:15:051004浏览

PHP中的面向对象实践
基本实践
高级实践
特殊实践
类的概念
实例化的概念
构造函数
析构函数
数据访问
对象引用的概念
类的概念
PHP面向<strong>对象</strong>编程——基本实践DAY 2

? 物以类聚,把具有相似特性的对象归类到一个类中
? 类定义了这些相似对象拥有的相同的属性和方法
? 类是相似对象的描述,称为类的定义,是该类对象的蓝图或者原型
? 类的对象称为类的一个实例(Instance) //类画了一个框架,对象把框架塞满
? 类的属性和方法统称为类成员
例子
? NBA球员就是一个类的定义(Class Definition)
? 乔丹、詹姆斯、科比称为类的实例(Instance)
NBA球员
+姓名
+身高
+体重
+所在球队
+球员号码
------------
+跑步()
+跳跃()
+运球()
+投篮()
+扣篮()
+传球()
类的实例化(instantiate)

PHP面向<strong>对象</strong>编程——基本实践DAY 2

PHP面向<strong>对象</strong>编程——基本实践DAY 2


案例
类和类的实例化案例
? 如何定义一个类
? 如何实例化类的对象
? 如何调用类的方法
? 构造函数

? 析构函数

<?php //类的定义以关键字class开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写。以中括号开始和结束
//定义NbaPlayer类
class NbaPlayer{
	
	//定义属性
	public $name="Jordan"; 
	public $height="198cm";
	public $weight="98kg";
	public $team="Bull";
	public $playerNumber="23";

	//定义方法
	public function run(){
		echo "Running\n";
	}

	public function jump(){
		echo "Jumping\n";
	}

	public function dribble(){
		echo "Dribbling\n";
	}
	
	public function shoot(){
		echo "Shooting\n";
	}
	
	public function dunk(){
		echo "Dunking\n";
	}
	
	public function pass(){
		echo "Passing\n";
	}
}

//类到<strong>对象的实例化
//类的实例化为<strong>对象</strong>时使用关键字new,new之后紧跟这类的名称和一对括号
$jordan = new NbaPlayer();
//<strong>对象</strong>中的属性成员可以通过->符号来访问
echo $jordan->name."\n";
//<strong>对象</strong>中的成员方法可以通过->符号来访问
$jordan->dribble();
$jordan->pass();

?>

Output:
Jordan
Dribbling
Passing
构造函数
<?php date_default_timezone_set("PRC");

//类的定义以关键字class开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写。以中括号开始和结束
//定义NbaPlayer类
class NbaPlayer{
	
	//定义属性
	public $name="Jordan"; 
	public $height="198cm";
	public $weight="98kg";
	public $team="Bull";
	public $playerNumber="23";

	//构造函数,在<strong>对象被实例化的时候自动调用
	function __construct($name,$height,$weight,$team,$playerNumber){ //没有被明确调用,但是也被调用了
		echo "In NbaPlayer Constructor\n";
		$this->name=$name; //$this是PHP里的伪变量,表示<strong>对象</strong>自身。可以通过$this->的方法访问<strong>对象</strong>的属性和方法
		$this->height=$height;
		$this->weight=$weight;
		$this->team=$team;
		$this->playerNumber=$playerNumber; 
	}

	//定义方法
	public function run(){
		echo "Running\n";
	}

	public function jump(){
		echo "Jumping\n";
	}

	public function dribble(){
		echo "Dribbling\n";
	}
	
	public function shoot(){
		echo "Shooting\n";
	}
	
	public function dunk(){
		echo "Dunking\n";
	}
	
	public function pass(){
		echo "Passing\n";
	}
}

//类到<strong>对象</strong>的实例化
//类的实例化为<strong>对象</strong>时使用关键字new,new之后紧跟这类的名称和一对括号
$jordan = new NbaPlayer("Jordan","198cm","98kg","Bull","23");
//<strong>对象</strong>中的属性成员可以通过->符号来访问
echo $jordan->name."\n";
//<strong>对象</strong>中的成员方法可以通过->符号来访问
$jordan->dribble();
$jordan->pass();

//每一次用new实例化<strong>对象</strong>的时候,都会用类名后面的参数列比调用构造函数
$james= new NbaPlayer("James","203cm","120kg","Heat","6");
echo $james->name;
echo $james->height;
echo $james->weight;
echo $james->team;
echo $james->playerNumber;
?>

Output:
In NbaPlayer Constructor
Jordan
Dribbling
Passing
In NbaPlayer Constructor
James
203cm
120kg
Heat
6

析构函数

<?php date_default_timezone_set("PRC");

//类的定义以关键字class开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写。以中括号开始和结束
//定义NbaPlayer类
class NbaPlayer{
	
	//定义属性
	public $name="Jordan"; 
	public $height="198cm";
	public $weight="98kg";
	public $team="Bull";
	public $playerNumber="23";

	//构造函数,在<strong>对象被实例化的时候自动调用
	function __construct($name,$height,$weight,$team,$playerNumber){ //没有被明确调用,但是也被调用了
		echo "In NbaPlayer Constructor\n";
		$this->name=$name; //$this是PHP里的伪变量,表示<strong>对象</strong>自身。可以通过$this->的方法访问<strong>对象</strong>的属性和方法
		$this->height=$height;
		$this->weight=$weight;
		$this->team=$team;
		$this->playerNumber=$playerNumber; 
	}
	
	//析构函数,在程序执行结束的时候会自动调用
	//析构函数通常被用于清理程序使用的资源,比如程序使用了打印机,那么可以在析构函数里面释放打印机资源。
	function __destruct(){
		echo "Destroying ".$this->name."<br>";
	}

	//定义方法
	public function run(){
		echo "Running\n";
	}

	public function jump(){
		echo "Jumping\n";
	}

	public function dribble(){
		echo "Dribbling\n";
	}
	
	public function shoot(){
		echo "Shooting\n";
	}
	
	public function dunk(){
		echo "Dunking\n";
	}
	
	public function pass(){
		echo "Passing\n";
	}
}

//类到<strong>对象</strong>的实例化
//类的实例化为<strong>对象</strong>时使用关键字new,new之后紧跟这类的名称和一对括号
$jordan = new NbaPlayer("Jordan","198cm","98kg","Bull","23");
//<strong>对象</strong>中的属性成员可以通过->符号来访问
echo $jordan->name."\n";
//<strong>对象</strong>中的成员方法可以通过->符号来访问
$jordan->dribble();
$jordan->pass();

//每一次用new实例化<strong>对象</strong>的时候,都会用类名后面的参数列比调用构造函数
$james= new NbaPlayer("James","203cm","120kg","Heat","6");
echo $james->name;

//通过把变量设置为null,可以触发析构函数的调用
$james=null;
echo "From now on James will not be used. <br>";
?>

Output:
In NbaPlayer Constructor
Jordan
Dribbling
Passing
In NbaPlayer Constructor
James
Destroying James
From now on James will not be used.
Destroying Jordan

对象引用的基本概念
对象引用赋值
PHP面向<strong>对象</strong>编程——基本实践DAY 2
詹姆斯是一个对象
$james就是对象的引用,直接指向詹姆斯这个对象
$james1和$james是两个独立的引用,$james1这个对象的引用直接指向詹姆斯这个对象
$james2是一个指向$james这个对象引用的对象引用(有点拗口),没有直接指向詹姆斯这个对象。$james2是通过$james这个对象引用去指向詹姆斯这个对象
现在直接指向对象詹姆斯的对象的引用有两个,即$james和$james1。而$james2是$james的映像。
示例一:

<?php date_default_timezone_set("PRC");

//类的定义以关键字class开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写。以中括号开始和结束
//定义NbaPlayer类
class NbaPlayer{
	
	//定义属性
	public $name="Jordan"; 
	public $height="198cm";
	public $weight="98kg";
	public $team="Bull";
	public $playerNumber="23";

	//构造函数,在<strong>对象被实例化的时候自动调用
	function __construct($name,$height,$weight,$team,$playerNumber){ //没有被明确调用,但是也被调用了
		echo "In NbaPlayer Constructor\n";
		$this->name=$name; //$this是PHP里的伪变量,表示<strong>对象</strong>自身。可以通过$this->的方法访问<strong>对象</strong>的属性和方法
		$this->height=$height;
		$this->weight=$weight;
		$this->team=$team;
		$this->playerNumber=$playerNumber; 
	}
	
	//析构函数,在程序执行结束的时候会自动调用
	//析构函数通常被用于清理程序使用的资源,比如程序使用了打印机,那么可以在析构函数里面释放打印机资源。
	function __destruct(){
		echo "Destroying ".$this->name."<br>";
	}

	//定义方法
	public function run(){
		echo "Running\n";
	}

	public function jump(){
		echo "Jumping\n";
	}

	public function dribble(){
		echo "Dribbling\n";
	}
	
	public function shoot(){
		echo "Shooting\n";
	}
	
	public function dunk(){
		echo "Dunking\n";
	}
	
	public function pass(){
		echo "Passing\n";
	}
}

//类到<strong>对象</strong>的实例化
//类的实例化为<strong>对象</strong>时使用关键字new,new之后紧跟这类的名称和一对括号
$jordan = new NbaPlayer("Jordan","198cm","98kg","Bull","23");
//<strong>对象</strong>中的属性成员可以通过->符号来访问
echo $jordan->name."\n";
//<strong>对象</strong>中的成员方法可以通过->符号来访问
$jordan->dribble();
$jordan->pass();

//每一次用new实例化<strong>对象</strong>的时候,都会用类名后面的参数列比调用构造函数
$james= new NbaPlayer("James","203cm","120kg","Heat","6");
echo $james->name;

//通过把变量设置为null,可以触发析构函数的调用
//当<strong>对象</strong>不会再被使用的时候,会触发析构函数
//james1也是指向new NbaPlayer();
$james1=$james; 
$james=null;
echo "From now on James will not be used. <br>";
?>
Output:
In NbaPlayer Constructor
Jordan
Dribbling
Passing
In NbaPlayer Constructor
James
From now on James will not be used.
Destroying James
Destroying Jordan
示例二:
<?php date_default_timezone_set("PRC");

//类的定义以关键字class开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写。以中括号开始和结束
//定义NbaPlayer类
class NbaPlayer{
	
	//定义属性
	public $name="Jordan"; 
	public $height="198cm";
	public $weight="98kg";
	public $team="Bull";
	public $playerNumber="23";

	//构造函数,在<strong>对象被实例化的时候自动调用
	function __construct($name,$height,$weight,$team,$playerNumber){ //没有被明确调用,但是也被调用了
		echo "In NbaPlayer Constructor\n";
		$this->name=$name; //$this是PHP里的伪变量,表示<strong>对象</strong>自身。可以通过$this->的方法访问<strong>对象</strong>的属性和方法
		$this->height=$height;
		$this->weight=$weight;
		$this->team=$team;
		$this->playerNumber=$playerNumber; 
	}
	
	//析构函数,在程序执行结束的时候会自动调用
	//析构函数通常被用于清理程序使用的资源,比如程序使用了打印机,那么可以在析构函数里面释放打印机资源。
	function __destruct(){
		echo "Destroying ".$this->name."<br>";
	}

	//定义方法
	public function run(){
		echo "Running\n";
	}

	public function jump(){
		echo "Jumping\n";
	}

	public function dribble(){
		echo "Dribbling\n";
	}
	
	public function shoot(){
		echo "Shooting\n";
	}
	
	public function dunk(){
		echo "Dunking\n";
	}
	
	public function pass(){
		echo "Passing\n";
	}
}

//类到<strong>对象</strong>的实例化
//类的实例化为<strong>对象</strong>时使用关键字new,new之后紧跟这类的名称和一对括号
$jordan = new NbaPlayer("Jordan","198cm","98kg","Bull","23");
//<strong>对象</strong>中的属性成员可以通过->符号来访问
echo $jordan->name."\n";
//<strong>对象</strong>中的成员方法可以通过->符号来访问
$jordan->dribble();
$jordan->pass();

//每一次用new实例化<strong>对象</strong>的时候,都会用类名后面的参数列比调用构造函数
$james= new NbaPlayer("James","203cm","120kg","Heat","6");
echo $james->name;

//通过把变量设置为null,可以触发析构函数的调用
//当<strong>对象</strong>不会再被使用的时候,会触发析构函数
//james1也是指向new NbaPlayer();
$james1=$james; //$james1直接指向詹姆斯
$james2=&james; //$james2相当于$james的影子,指向$james, $james再指向詹姆斯
$james=null; //不需要再次设置$james2=null,因为他俩的效果是一样的
$james1=null; //任何一个赋值为null相当于删除了一个<strong>对象</strong>的引用
echo "From now on James will not be used. <br>";
?>

Output:
In NbaPlayer Constructor
Jordan
Dribbling
Passing
In NbaPlayer Constructor
James
Destroying James
From now on James will not be used.
Destroying Jordan

以上就介绍了PHP面向对象编程——基本实践DAY 2,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn