php物件導向程式設計的一些小問題

2021-05-04 03:30:24 字數 1492 閱讀 7102

1、 empty檢查物件屬性是否為空

有這樣乙個類:

class cytest {        

private $val;     

function __construct($_val=''){

$this->val = $_val;      

function __get($name){   

return $this->$name;     

function getv(){  

return $this->val;       

$obj = new cytest('aaaa');

var_dump(empty($obj->val)); // true

$val = $obj->getv();  

var_dump(empty($val)); // false

echo "get/n";

從這裡可以看出,empty($obj->val)顯示$obj->val為空,而$obj->getv()顯示它又不為空。猜測是由於第一種方式沒有呼叫__get方法。修改__get方法如下:

function __get($name){

echo "get/n";

return $this->$name;

證實了猜測,沒有get輸出,該方法沒被呼叫。

但是為什麼呢?

還有,如果我們把這兩句合為一句:

$val = $obj->getv();  

var_dump(empty($val));

var_dump(empty($obj->getv()));

則報錯:

fatal error: can't use method return value in write context

那麼,猜測,這個錯誤,和上面不同的結果,都是由於empty的原因。

2、子類新增的屬性,不能直接用父類的set和get方法

class cbase{

private $val;

function __construct($_val){

$this->val = $_val;

function __set($name, $val){

$this->$name = $val;

function __get($name){

return $this->$name;

class cchild extends cbase{

private $cval;

function __construct($_val, $_cval){

$this->cval = $_cval;

parent::__construct($_val);

$child = new cchild('val', 'cval');

var_dump($child->val);

var_dump($child->cval);

這裡,必須在子類也顯示宣告__get和__set方法。

php的一些小問題

1 三個等號和二個等號的區別 vs 比如你乙個函式會返回這幾種情況 1 大於0的數 2 小於0的數 3 等於0的數 也就是0啦 4 false 失敗時 這時候如果你想捕獲失敗的情況,你就必須用 而不能用 因為 除了會匹配第4種情況外,還會匹配第3種情況,因為0也是假!在來乙個 a 2 字元型2 b ...

一些小問題

1 曼徹斯特編碼和差分曼徹斯特編碼。曼徹斯特編碼,常用於區域網傳輸。在曼徹斯特編碼中,每一位的中間有一跳變,位中間的跳變既作時鐘訊號,又作資料訊號 從高到低跳變表示 1 從低到高跳變表示 0 還有一種是差分曼徹斯特編碼,每位中間的跳變僅提供時鐘定時,而用每位開始時有無跳變表示 0 或 1 有跳變為 ...

一些小問題

問1 子類繼承了父類的所有成員,對嗎?答1 錯,至少子類沒有繼承父類的建構函式 析構函式不知有沒有繼承,但複製建構函式肯定是繼承了 class a a intx a const a a a operator const a a class b public a intmain view code 問...