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 問...