php初始化函數
『壹』 php中構造函數與自定義函數區別
構造方法:用戶創建對象時,系統自動調用的方法;
功能:初始化類中必備數據的;
PHP5實現方法:
1)方法名和類名相同的方法
2)PHP中設置的魔術方法(用戶執行了某種操作後,系統自動調用的方法):
__construct();
注意:1】如果沒有定義構造方法,那麼系統會自動的創建一個空魔術構造方法;
2】如果PHP4中的構造方法和PHP5中的構造方法,同時存在,那麼PHP5中的構造方法優先使用;普通的成員方法和構造方法的區別和聯系:
1】普通的方法如果定義的名字和類名相同,那麼就變成構造方法
2】如果構造方法中有參數,那麼參數列表要和創建對象時,類名後的小括弧參數類表完全一樣;
3】普通的方法主要是為了完成某個功能,而構造方法主要是初始化數據
4】普通的方法的可以有返回值,但是構造方法從語法上可以有返回值,但是從意義上不能有返回值;
『貳』 php 未調用函數 是否初始化
引入的函數在不執行時,是不會進行什麼初始化的。只有在調用的時候,才會進行初始化。
除了定義在函數體外的全局變數,才需要在引入時進行初始化。
『叄』 【PHP】初始化是一定要用類的同名函數做構造函數嗎
PHP中類的初始化有兩種方式,一種是像你所說的同名函數做構造函數,另外一種則是定義__construct()(前面兩個下劃線_)做構造函數,這兩者除了函數名稱不一樣外,其它沒什麼區別,都是用來初始化類的。但建議用後者,原因是如果使用了同名函數做構造函數,當類名發生改變,相應的構造函數名也要改變。而__construct被默認作為當前類的構造函數
『肆』 php語言,初始化到底是用類的同名函數,還是用__construct()
2種方法都可以
『伍』 關於 php 類 繼承 構造函數 初始化 問題
在進行 oop 封裝處理的時候你的思路我不贊同的
因為很多類會引用 db(也就是資料庫類),那麼我就創建一個基類(base),然後在 base 中 引入 db 類,並創建 db 對象,設置自動初始化,這樣通過基類在構建子類,通過子類構建對象,那麼所有子類中的所有 成員函數就都可以使用 $this->db->方法(調用資料庫類的一個方法)
例如:
class Base{
function __construct()
{
$db='';
require_once ('class/class_mysql.php');
$this->db = new class_mysql(DB_HOST, DB_USER,DB_PW, DB_NAME);
$this->db->set_mysql_charset(DB_CHARSET);
}
}
class control extends Base{
function __construct() {
parent::__construct (); //初始化父類
.......
}
}
『陸』 PHP類中給成員屬性初始化值為什麼報錯
PHP類中,若要初始化成員屬性,那麼成員屬性的初始值必須是一個常數,如果不是常數(如變數),則會報錯。
『柒』 PHP 的 require函數
require()是php的內置函數,作用是引入或者包含外部php文件。
工作原理:當本身php文件被執行時,則外部文件的內容就將被包含進該自身php文件中;當包含的外部文件發生錯誤時,系統將拋出錯誤提示,並且停止php文件的執行。
注意:使用require時,一個文件存在錯誤的話,那麼程序就會中斷執行了,並顯示致命錯誤。
比如cl.php,ts.php兩個文件,ts.php要用到cl.php文件中的函數,需要在ts.php中引入或者包含cl.php即可.示例如下:
cl.php
<?php
functionshow(){
echo"cl.php文件中的show方法被調用了!";
}
?>
ts.php
<?php
require'cl.php';
show();
?>
運行結果:
『捌』 php中的類有什麼用和自定義函數有什麼區別
請看PHP手冊18章,裡面的內容你看了就明白。
第18章類與對象(PHP4)
目錄
類
繼承
構造函數
范圍解析操作符(::)
parent
序列化對象-會話中的對象
魔術函數__sleep和__wakeup
構造函數中的引用
對象的比較
類
類是變數與作用於這些變數的函數的集合。使用下面的語法定義一個類:
<?php
classCart{
var$items;//購物車中的物品
//將$num個$artnr物品加入購物車
functionadd_item($artnr,$num){
$this->items[$artnr]+=$num;
}
//將$num個$artnr物品從購物車中取出
functionremove_item($artnr,$num){
if($this->items[$artnr]>$num){
$this->items[$artnr]-=$num;
returntrue;
}elseif($this->items[$artnr]==$num){
unset($this->items[$artnr]);
returntrue;
}else{
returnfalse;
}
}
}
?>
上面的例子定義了一個Cart類,這個類由購物車中的商品構成的數組和兩個用於從購物車中添加和刪除商品的函數組成。
警告
不能將一個類的定義分割到多個文件中。也不能將一個類的定義分割到多個PHP塊中,除非該分割是在一個方法聲明內部。以下用法將不起作用:
<?php
classtest{
?>
<?php
functiontest(){
print'OK';
}
}
?>
但是以下用法是可以的:
<?php
classtest{
functiontest(){
?>
<?php
print'OK';
}
}
?>
以下警告僅用於PHP4。
小心
名稱stdClass已經被Zend使用並保留。不能在PHP代碼中定義名為stdClass的類。
小心
函數名__sleep和__wakeup在PHP類中是魔術函數。除非想要與之聯系的魔術功能,否則在任何類中都不能以此命名函數。
小心
PHP將所有以__開頭的函數名保留為魔術函數。除非想要使用一些見於文檔中的魔術功能,否則建議不要在PHP中將函數名以__開頭。
在PHP4中,var變數的值只能初始化為常量。用非常量值初始化變數,需要一個初始化函數,該函數在對象被創建時自動被調用。這樣一個函數被稱之為構造函數(見下面)。
<?php
/*PHP4中不能這樣用*/
classCart{
var$todays_date=date("Y-m-d");
var$name=$firstname;
var$owner='Fred'.'Jones';
/*不過包含有常量的數組可以*/
var$items=array("VCR","TV");
}
/*應該這樣進行*/
classCart{
var$todays_date;
var$name;
var$owner;
var$items=array("VCR","TV");
functionCart(){
$this->todays_date=date("Y-m-d");
$this->name=$GLOBALS['firstname'];
/*etc...*/
}
}
?>
類也是一種類型,就是說,它們是實際變數的藍圖。必須用new運算符來創建相應類型的變數。
<?php
$cart=newCart;
$cart->add_item("10",1);
$another_cart=newCart;
$another_cart->add_item("0815",3);
?>
上述代碼創建了兩個Cart類的對象$cart和$another_cart,對象$cart的方法add_item()被調用時,添加了1件10號商品。對於對象$another_cart,3件0815號商品被添加到購物車中。
$cart和$another_cart都有方法add_item(),remove_item()和一個items變數。它們都是明顯的函數和變數。可以把它們當作文件系統中的某些類似目錄的東西來考慮。在文件系統中,可以擁有兩個不同的README.TXT文件,只要不在相同的目錄中。正如從為了根目錄訪問每個文件需要輸入該文件的完整的路徑名一樣,必須指定需要調用的函數的完整名稱:在PHP術語中,根目錄將是全局名字空間,路徑名符號將是->。因而,名稱$cart->items和$another_cart->items命名了兩個不同的變數。注意變數名為$cart->items,不是$cart->$items,那是因為在PHP中一個變數名只有一個單獨的美元符號。
<?php
//正確,只有一個$
$cart->items=array("10"=>1);
//不正確,因為$cart->$items變成了$cart->""
$cart->$items=array("10"=>1);
//正確,但可能不是想要的結果:
//$cart->$myvar變成了$cart->items
$myvar='items';
$cart->$myvar=array("10"=>1);
?>
在定義類的時候,無法得知將使什麼名字的對象來訪問:在編寫Cart類時,並不知道之後對象的名稱將會命名為$cart或者$another_cart。因而你不能在類中使用$cart->items。然而為了類定義的內部訪問自身的函數和變數,可以使用偽變數$this來達到這個目的。$this變數可以理解為「我自己的」或者「當前對象」。因而'$this->items[$artnr]+=$num'可以理解為「我自己的物品數組的$artnr計數器加$num」或者「在當前對象的物品數組的$artnr計數器加$num」。
注意:偽變數$this通常未定義,如果其所在的方法是被靜態調用的話。但這不是個嚴格規定:如果一個方法被從另一個對象內靜態調用的話,則$this會被定義。此時$this的值是那個發出調用的對象。用下例演示:
<?php
classA
{
functionfoo()
{
if(isset($this)){
echo'$thisisdefined(';
echoget_class($this);
echo")\n";
}else{
echo"\$thisisnotdefined.\n";
}
}
}
classB
{
functionbar()
{
A::foo();
}
}
$a=newA();
$a->foo();
A::foo();
$b=newB();
$b->bar();
B::bar();
?>
上例將輸出:
$thisisdefined(a)
$thisisnotdefined.
$thisisdefined(b)
$thisisnotdefined.注意:有一些不錯的函數用來處理類和對象。應該關注一下類/對象函數。
『玖』 php是先產生對象再調用構造函數初始化的么
可以這么理解,在你實例化類的時候,自動執行構造函數。