php調用類的屬性
㈠ php中,怎麼在成員函數當中調用自己的成員屬性除了靜態調用之外還有別的方法嗎
和靜態數據成員一樣,靜態成員函數是類的一部分,而不是對象的一部分。如果要在類外調用公用的靜態成員函數,要用類名和域運算符「∷」。
如 Box∷volume( ); 實際上也允許通過對象名調用靜態成員函數,如 a.volume( ); 但這並不意味著此函數是屬於對象a的,而只是用a的類型而已。 靜態成員函數的作用是為了能處理靜態數據成員。 可以說,靜態成員函數與非靜態成員函數的根本區別是:非靜態成員函數有this指針,靜態成員函數並不屬於某一對象,它與任何對象都無關,靜態成員函數沒有this指針。
由此決定了靜態成員函數不能訪問本類中的非靜態成員。 在C++程序中,靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態成員。假如在一個靜態成員函數中有以下語句: cout<<height<<endl; //若height已聲明為static,則引用本類中的靜態成員,合法 cout<<width<<endl; //若width是非靜態數據成員,不合法。但是,並不是絕對不能引用本類中的非靜態成員,只是不能進行默認訪問,因為無法知道應該去找哪個對象。如果一定要引用本類的非靜態成員,應該加對象名和成員運算符「.」。如 cout<<a.width<<endl; //引用本類對象a中的非靜態成員
㈡ PHP中類的屬性在類中調用只必須使用$this嗎
在 sd()里使用變數a只能用$this->a嗎?
是的
類中的echo $b;為什麼會報錯呢?
類中只能有成員變數和成員函數, 這不是變數也不是函數,這是一個執行語句,所以當然會報錯。
㈢ php 中類的屬性可以調用方法嗎,怎麼調用
你大概是想通過調用類中的某個方法,來動態改變類的屬性的值吧。這樣其實沒有「屬性調用方法」這種說法,你在類中單獨寫個方法,或者析構函數,自動調用類中的某個方法來給該類的屬性賦值是可以的。
㈣ php 父類為什麼能調用子類的屬性
在集成的時候父類的屬性會被保護。如果想要調用父類的屬性必須使用父類對象super去調用,不然訪問不了。你在子類中沒有X的屬性,所以在調用時使用this或super調用屬性,這個時候不論是this還是super調用的都是父類的X屬性。
㈤ PHP中類的屬性在類中調用只必須使用$this嗎
首先在類里不能直接輸出,所以你的第5行的
echo
$b;不對;
在函數中$this就表示「這個」的意思,表明了這個屬性或方法是當前方法的
我稍微改了一下你的例子:
?php
class
Test
{
public
$a=1;
public
$b=2;
function
sd()
{
echo
$this-
a;
}
}
$x=
new
Test();
$x->sd();
?>
要想輸出要實例化類,也就是建一個對象來調用它,建議你可以看看php100的視頻對於剛接觸php的人來說很不錯的
㈥ php中既然可以直接用類名調用類中的方法和屬性,那還聲明對象幹嘛 這不是多此一舉嗎
你的寫法是 PHP 4 格式,只是PHP在向下兼容罷了。。
類方法的靜態調用問題。。你是想知道,即然可以靜態調用,為什麼還要實例化對象。
從使用的角度來說,區別在於。這是一個對象。還是一個類。主要是思路上的區別。從書寫的角度來說,也是各有優缺點。。
正如你看到的,靜態調用可以省去實例化,而且全局有效。但是用起來,更像是自定義函數。很難體現出 OOP 思想所在。
實例化之後的變數是一個對象,有明確的方法和屬性。從編程思路上來說更清晰。
如果你只是以這么簡單的代碼來舉例,感覺當然都一樣。那麼我舉個例子。
$mysql = new db_mysql(); //實例化一個MYSQL對象
$rows = $mysql->table('test')->select(); //MYSQL 對象查詢一個表數據。
$mysql->debug(); // MYSQL 列印錯誤信息
以上代碼全是 MYSQL 對象在操作。。
如果用全靜態化的方法寫。就得這么寫:
db_mysql::table('test'); //設置一個數據表,是誰在控制。
$rows = db_mysql::select(); //查詢數據,誰在查?
db_mysq::debug(); //列印錯誤信息,錯誤信息是誰發出來的?
以上代碼對象完全不清晰。只知道是 MYSQL 的一些功能。
你還覺得這么寫方便么?而且代碼長起來會更混亂。思路都已經有些混亂了。如果你試著封裝這么一個類,你會覺得更麻煩。
㈦ PHP怎麼調用其他類的方法
在Java的調用方法是import,而在PHP中沒有import這個函數,一般PHP中調用其他類是用到require(),具體PHP調用其他類的方法如下:
1、首先應該先有一個文件名為tool.php的文件,在文件中聲明一個類。
(7)php調用類的屬性擴展閱讀:
類是變數與作用於這些變數的函數的集合。使用下面的語法定義一個類:
<?php
class Cart { var $items; // 購物車中的物品
// 將 $num 個 $artnr 物品加入購物車
function add_item($artnr, $num) {
$this->items[$artnr] += $num;
} // 將 $num 個 $artnr 物品從購物車中取出
function remove_item($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num; return true;
} elseif
($this->items[$artnr] == $num) {
unset($this->items[$artnr]); return true;
} else {
return false; }
}
} ?>
上面的例子定義了一個 Cart 類,這個類由購物車中的商品構成的數組和兩個用於從購物車中添加和刪除商品的函數組成。
㈧ PHP子類怎麼調用父類的屬性
父類的Pname
是
private
類型,也就是私有的只能父類自己的
函數調用
,子類以及外部是無法調用的。
如果這個變數只允許本類方法調用
應該用
private
方式調用,如果允許本類以及子類調用應該用
protected
保護)修飾,如果希望外部調用則應該用
public
公開修飾。這三個關鍵詞對函數同樣有效。
我把php.net關於這個的說明放在下面參考資料裡面了,你可以仔細看下。
㈨ PHP子類怎麼調用父類的屬性
<?php
class Perpon {
private $Pid;
private $Pname;
private $Page;
private $Psex;
private $Pbirthday;
public function __construct($Pid,$Pname,$Page,$Psex,$Pbirthday)//PHP5中間的構造函數
{ $this->Pid=$Pid;
$this->Pname=$Pname;
$this->Page=$Page;
$this->Pbirthday=$Pbirthday;
echo "創建了一個對象"."<br>";
}
public function __set($name,$value) {
$this->$name=$value;
}
function show(){
echo ("我的姓名:$this->Pname,我的年齡:$this->Page,我的性別是:$this->Psex,我的生日是$this->Pbirthday <br>"); }
public function __get($name) { return $name; }
public function dining() { echo "$this->Pname 正在吃飯 <br>"; }
public function shuohua() { echo "$this->Pname喜歡說話 <br>"; }
public function gaosu() { echo "我的姓名叫做$this->Pname <br>"; }
public function IT() { echo $this->Pname."的工作是IT行業 <br>"; }
}
class Student extends Perpon {
public function __construct()//PHP5中間的構造函數
{ echo "子類的構造函數"; }
public function IT()//PHP5中間的構造函數
{ parent::IT();
echo $this->Pname."的工作是學生<br>";
}
}
$perpon=new Perpon('1','zhangsan','18','男','9月23'); $perpon->show(); $perpon->dining(); $perpon->shuohua(); $perpon->gaosu(); $perpon->IT();
echo "<hr>";
$student=new Student(); $student->IT();?>
調不到的原因是:
private $Pname;
記住:private只能自己調用,其他是不行的,這一點你自己記住即可。
㈩ PHP在類外如何調用類里的成員屬性
在類載入的時候就會分配內存,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的對象,所以只有在類的對象產生(創建類的實例)時才會分配內存,然後通過類的對象(實例)去訪問。
在一個類的靜態成員中去訪問其非靜態成員之所以會出錯是因為在類的非靜態成員不存在的時候類的靜態成員就已經存在了,訪問一個內存中不存在的東西當然會出錯:class CA{private:int a; //非靜態成員,創建類的實例時分配內存,類的不同實例對應不同的內存區域