PHP-Cookbook-chapte9

程式碼

//'9.1'建立物件
$session_name = $session_txt['9.1'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

class Name{
	var $property1;
	var $property2;
	
	function print_name($first_name,$last_name){
		print "You first name is :$first_name,<br>";
		print "and your last name :$last_name.";
	}
}

$obj = &new Name;
$obj->firstname='Oliver';
$obj->lastname='Butin';

$obj->print_name($obj->firstname,$obj->lastname); 


$message="
<fieldset><legend><font color=red>TIPS</font></legend>
    \$obj = &new Name;<br>
    \$obj->firstname='Oliver';<br>
    \$obj->lastname='Butin';<br><br>

     \$obj->print_name(\$obj->firstname,\$obj->lastname); 
<br>
</fieldset>
";
echo $message."<br>";
//'9.2'在類別裡存取變數
$session_name = $session_txt['9.2'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

class Name1 {
	var $firstname;
	var $lastname;
	
	function print_name(){
		print 'Firstname :'. $this->firstname;
		print '<br>Lastname :'. $this->lastname."<br>";
	}

    function change_name ($name){
		$name = preg_split('/\s+/',$name);
		$this->firstname = $name[0];
		$this->lastname = $name[1];
	}

}

$obj = &new Name1;
$obj->change_name("Sterlling Hughes");
$obj->print_name();
$obj->change_name("Andrei Zmievski");
$obj->print_name();

$message="
<fieldset><legend><font color=red>TIPS</font></legend>
    取class的變數 \$this->firstname,不用加\$符號。
<br>
</fieldset>
";
echo $message."<br>";
//'9.4'設定公開和私有變數或函式
$session_name = $session_txt['9.4'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

class Car {
	var $_name; // 私有變數
	var $brandname;
	
	function analyze(){
		if ($this->_name == "Corola"){
			$this->brandname = 'Toyota';
		}else {
			$this-_delete();
		}
	}
	function _delete(){
		$this->name ='';
		$this->brandname ='';
	}
}
	

$message="
<fieldset><legend><font color=red>TIPS</font></legend>
   如果要宣告函式和變數為類別所私有,你必須將它們放在函數內。<br>
   然而有個標準命名慣例,私有方法和變數應該有底線(_)開頭。
<br>
</fieldset>
";
echo $message."<br>";
//'9.5'撰寫建構函式(constructor)
$session_name = $session_txt['9.5'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

class Human {
	var $name;
	
	function Human ($na){
		print "Wake up $na, you have been initalized!<br>";
		$this->name = $na;
	}
}
$obj = &new Human ('Stephen Hughes');


class SuperHuman extends Human {
	var $power;
	
	function SuperHuman($power){
		Human::Human(); //呼叫class Human 及 class 裡的 Human方法
		$this->$power = $power;
		print "You power is $power";
	}
	
	function user_power(){
	}
}
$obj1 = &new SuperHuman (10);
	

$message="
<fieldset><legend><font color=red>TIPS</font></legend>
  在PHP,建構函式是一個與類別名稱大小寫相同的函式,它可以接受參數<br>
  ,以便在初始化的時候讓物件有機會修改預設的資料。另外請注意,如果<br>
  親代類別也有一個建構函式,那麼當子類別產生物件時並不會呼叫親代的<br>
  建構函式。所以你必須手動作點工。<br>
  function SuperHuman(\$power){<br>
	<font color=red>
	Human::Human(); //呼叫class Human 及 class 裡的 Human方法
	</font>
	<br>
		\$this->\$power = \$power;<br>
		print 'You power is \$power';<br>
	}
	
<br>
</fieldset>
";
echo $message."<br>";
//'9.8'直接使用類別函式而不需產生物件
$session_name = $session_txt['9.8'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

class Conversion {
	
	function feet_to_meters($feet){
		return $feet * 0.3054;
	}
}
$orgin_height = 6;
$average_height = Conversion::feet_to_meters($orgin_height);
print "輸入的$orgin_height 呎<br>";
print "換算成$average_height 公尺";

$message="
<fieldset><legend><font color=red>TIPS</font></legend>
    範例:原始碼<br>
	class Coversion {<br>
	function feet_to_meters(\$feet){<br>
		return \$feet * 0.3054;<br>
	   }<br>
}<br>
\$averge = Conversion::feet_to_meters(6);<br>
直接用符號::來用Conversion -class裡的方法feet_to_meters()<br>
也可以存取變數。
 
<br>
</fieldset>
";
echo $message."<br>";
//'9.9'直接存取親代類別的函式
$session_name = $session_txt['9.9'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

class Computer {
	var $is_on = 1;
	
	function turn_on(){
		$this->is_on = 1;
		print "You turned me on";
	}
	
	function turn_off(){
		$this->is_on = 0;
		print "You turned me off";
	}
}

class HP extends Computer {
	var $processor = 0;
	var $hard_driver =0;
	
	function turn_on(){
		parent::turn_on();
		$this->processor = 1;
		$this->hard_drive = 1;
	}
	
	function turn_off(){
		$this->hard_drive = 0;
		$this->processor = 1;
		parent::turn_off();
	}
}

$message="
<fieldset><legend><font color=red>TIPS</font></legend>
    parent類別是個特殊類別,只能用::表示法存取。它可以讓你存取<br>
	親代類別的函式。
	
<br>
</fieldset>
";
echo $message."<br>";