-
PHP類和對象之構造函數和析構函數
在子類中如果定義了__construct則不會調用父類的__construct,如果需要同時調用父類的構造函數,需要使用parent::__construct()顯式的調用。
查看全部 -
PHP類和對象之定義類的方法
使用關鍵字static修飾的,稱之為靜態方法,靜態方法不需要實例化對象,可以通過類名直接調用,操作符為雙冒號::
查看全部 -
PHP類和對象之類的屬性
默認都為public,外部可以訪問。一般通過->對象操作符來訪問對象的屬性或者方法,對于靜態屬性則使用::雙冒號進行訪問。當在類成員方法內部調用的時候,可以使用$this偽變量調用當前對象的屬性。
受保護的屬性與私有屬性不允許外部調用,在類的成員方法內部是可以調用的。
查看全部 -
PHP類和對象之創建一個對象
//方法內部可以使用$this偽變量調用對象的屬性或者方法
查看全部 -
數組就是一個鍵值對組成的語言結構
查看全部 -
數組就是一個鍵值對組成的語言結構,鍵類似于酒店的房間號,值類似于酒店房間里存儲的東西。
查看全部 -
數組就是一個鍵值對組成的語言結構,鍵類似于酒店的房間號,值類似于酒店房間里存儲的東西。
查看全部 -
PHP數據庫操作之更新與刪除數據
數據的更新與刪除相對比較簡單,只需要構建好相應的sql語句,然后調用mysql_query執行就能完成相應的更新與刪除操作。
$sql?=?"update?user?set?name?=?'曹操'?where?id=2?limit?1";?if?(mysql_query($sql))?{?????echo?'更新成功';?}
同樣的刪除可以使用類似以下的代碼:
$sql?=?"delete?from?user?where?id=2?limit?1";?if?(mysql_query($sql))?{?????echo?'刪除成功';?}
對于刪除與更新操作,可以通過mysql_affected_rows函數來獲取更新過的數據行數,如果數據沒有變化,則結果為0。
$sql?=?"update?user?set?name?=?'曹操'?where?id=2?limit?1";?if?(mysql_query($sql))?{?????echo?mysql_affected_rows();
查看全部 -
當我們了解了如何使用mysql_query進行數據查詢以后,那么類似的,插入數據其實也是通過執行一個sql語句來實現,例如:
$sql?=?"insert?into?user(name,?age,?class)?values('李四',?18,?'高三一班')"; mysql_query($sql);?//執行插入語句
通常數據都是存儲在變量或者數組中,因此sql語句需要先進行字符串拼接得到。
$name?=?'李四'; $age?=?18; $class?=?'高三一班'; $sql?=?"insert?into?user(name,?age,?class)?values('$name',?'$age',?'$class')"; mysql_query($sql);?//執行插入語句
在mysql中,執行插入語句以后,可以得到自增的主鍵id,通過PHP的mysql_insert_id函數可以獲取該id。
$uid?=?mysql_insert_id();
這個id的作用非常大,通??梢杂脕砼袛嗍欠癫迦氤晒?,或者作為關聯ID進行其他的數據操作。
查看全部 -
數據庫建立連接以后就可以進行查詢,采用mysql_query加sql語句的形式向數據庫發送查詢指令。
$res?=?mysql_query('select?*?from?user?limit?1');
對于查詢類的語句會返回一個資源句柄(resource),可以通過該資源獲取查詢結果集中的數據。
$row?=?mysql_fetch_array($res); var_dump($row);
默認的,PHP使用最近的數據庫連接執行查詢,但如果存在多個連接的情況,則可以通過參數指令從那個連接中進行查詢。
$link1?=?mysql_connect('127.0.0.1',?'code1',?''); $link2?=?mysql_connect('127.0.0.1',?'code1',?'',?true);?//開啟一個新的連接 $res?=?mysql_query('select?*?from?user?limit?1',?$link1);?//從第一個連接中查詢數據
查看全部 -
mysql擴展進行數據庫連接的方法:
$link?=?mysql_connect('mysql_host',?'mysql_user',?'mysql_password');
mysqli擴展:
$link?=?mysqli_connect('mysql_host',?'mysql_user',?'mysql_password');
PDO擴展
$dsn?=?'mysql:dbname=testdb;host=127.0.0.1'; $user?=?'dbuser'; $password?=?'dbpass'; $dbh?=?new?PDO($dsn,?$user,?$password);
查看全部 -
一般的異常處理流程代碼為:
try?{ ????throw?new?Exception('wrong'); }?catch(Exception?$ex)?{ ????echo?'Error:'.$ex->getMessage().'<br>'; ????echo?$ex->getTraceAsString().'<br>'; } echo?'異常處理后,繼續執行其他代碼';
查看全部 -
查看全部
-
索引數組賦值有三種方式:
$arr[0]='蘋果';
array('0'=>'蘋果');
array('蘋果');
這個數組相當于array('0'=>'蘋果');
查看全部 -
前面的小節,我們已經接觸過訪問控制了,訪問控制通過關鍵字public,protected和private來實現。被定義為公有的類成員可以在任何地方被訪問。被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。被定義為私有的類成員則只能被其定義所在的類訪問。
類屬性必須定義為公有、受保護、私有之一。為兼容PHP5以前的版本,如果采用 var 定義,則被視為公有。
class?Car?{ ????$speed?=?10;?//錯誤?屬性必須定義訪問控制 ????public?$name;???//定義共有屬性 }
類中的方法可以被定義為公有、私有或受保護。如果沒有設置這些關鍵字,則該方法默認為公有。
class?Car?{ ????//默認為共有方法 ????function?turnLeft()?{ ????} }
如果構造函數定義成了私有方法,則不允許直接實例化對象了,這時候一般通過靜態方法進行實例化,在設計模式中會經常使用這樣的方法來控制對象的創建,比如單例模式只允許有一個全局唯一的對象。
class?Car?{ ????private?function?__construct()?{ ????????echo?'object?create'; ????} ????private?static?$_object?=?null; ????public?static?function?getInstance()?{ ????????if?(empty(self::$_object))?{ ????????????self::$_object?=?new?Car();?//內部方法可以調用私有方法,因此這里可以創建對象 ????????} ????????return?self::$_object; ????} } //$car?=?new?Car();?//這里不允許直接實例化對象 $car?=?Car::getInstance();?//通過靜態方法來獲得一個實例
? ? ? ? ? ? ?
查看全部 -
靜態屬性與方法可以在不實例化類的情況下調用,直接使用
類名::方法名
的方式進行調用。靜態屬性不允許對象使用->操作符調用。class?Car?{ ????private?static?$speed?=?10; ???? ????public?static?function?getSpeed()?{ ????????return?self::$speed; ????} } echo?Car::getSpeed();??//調用靜態方法
靜態方法也可以通過變量來進行動態調用
$func?=?'getSpeed'; $className?=?'Car'; echo?$className::$func();??//動態調用靜態方法
靜態方法中,$this偽變量不允許使用。可以使用self,parent,static在內部調用靜態方法與屬性。
class?Car?{ ????private?static?$speed?=?10; ???? ????public?static?function?getSpeed()?{ ????????return?self::$speed; ????} ???? ????public?static?function?speedUp()?{ ????????return?self::$speed+=10; ????} } class?BigCar?extends?Car?{ ????public?static?function?start()?{ ????????parent::speedUp(); ????} }BigCar::start();echo?BigCar::getSpeed();
? ? ? ? ? ? ?
查看全部 -
在子類中如果定義了__construct則不會調用父類的__construct,如果需要同時調用父類的構造函數,需要使用parent::__construct()顯式的調用。
class?Car?{ ???function?__construct()?{ ???????print?"父類構造函數被調用\n"; ???} } class?Truck?extends?Car?{ ???function?__construct()?{ ???????print?"子類構造函數被調用\n"; ???????parent::__construct(); ???} } $car?=?new?Truck();
同樣,PHP5支持析構函數,使用__destruct()進行定義,析構函數指的是當某個對象的所有引用被刪除,或者對象被顯式的銷毀時會執行的函數。
class?Car?{ ???function?__construct()?{ ???????print?"構造函數被調用?\n"; ???} ???function?__destruct()?{ ???????print?"析構函數被調用?\n"; ???} } $car?=?new?Car();?//實例化時會調用構造函數 echo?'使用后,準備銷毀car對象?\n'; unset($car);?//銷毀時會調用析構函數
當PHP代碼執行完畢以后,會自動回收與銷毀對象,因此一般情況下不需要顯式的去銷毀對象。
查看全部
舉報