當前位置:首頁 » 編程語言 » php面向對象全攻略

php面向對象全攻略

發布時間: 2022-12-24 04:24:25

php面向對象全攻略 (三)特殊的引用「$this」的使用

7.特殊的引用「$this」的使用
現在我們知道了如何訪問對象中的成員,是通過「對象->成員」的方式訪問的,這是在對
象的外部去訪問對象中成員的形式,那麼如果我想在對象的內部,讓對象里的方法訪問本對
象的屬性,或是對象中的方法去調用本對象的其它方法這時我們怎麼辦?因為對象裡面的所
有的成員都要用對象來調用,包括對象的內部成員之間的調用,所以在PHP
裡面給我提供了
一個本對象的引用$this,每個對象裡面都有一個對象的引用$this
來代表這個對象,完成對象
內部成員的調用,this
的本意就是「這個」的意思,上面的實例裡面,我們實例化三個實例
對象$P1、$P2、$P3,這三個對象裡面各自存在一個$this
分別代表對象$p1、$p2、$p3。
通過上圖我們可以看到,$this
就是對象內部代表這個對象的引用,在對象內部和調用本
對象的成員和對象外部調用對象的成員所使用的方式是一樣的。
$this->屬性$this->name;
$this->age;
$this->sex;
$this->方法$this->say();
$this->run();
修改一下上面的實例,讓每個人都說出自己的名字,性別和年齡:
代碼片段
復制代碼
代碼如下:
<?php
class
Person{
//下面是人的成員屬性
var
$name;
//人的名字
var
$sex;
//人的性別
var
$age;
//人的年齡
//下面是人的成員方法
function
say(){//這個人可以說話的方法
echo
"我的名字叫:".$this->name."
性別:".$this->sex."
我的年齡是:".$this->age."<br>";
}
function
run(){
//這個人可以走路的方法
echo
"這個人在走路";
}
}
$p1=new
Person();
//創建實例對象$p1
$p2=new
Person();
//創建實例對象$p2
$p3=new
Person();
//創建實例對象$p3
//下面三行是給$p1對象屬性賦值
$p1->name="張三";
$p1->sex="男";
$p1->age=20;
//下面訪問$p1對象中的說話方法
$p1->say();
//下面三行是給$p2對象屬性賦值
$p2->name="李四";
$p2->sex="女";
$p2->age=30;
//下面訪問$p2對象中的說話方法
$p2->say();
//下面三行是給$p3對象屬性賦值
$p3->name="王五";
$p3->sex="男";
$p3->age=40;
//下面訪問$p3對象中的說話方法
$p3->say();
?>
輸出結果
我的名字叫:張三性別:男我的年齡是:20
我的名字叫:李四性別:女我的年齡是:30
我的名字叫:王五性別:男我的年齡是:40
分析一下這個方法:
代碼片段
function
say(){
//這個人可以說話的方法
echo
"我的名字叫:".$this->name."
性別:".$this->sex."
我的年齡是:".$this->age."<br>";
}
在$p1、$p2
和$p3
這三個對象中都有say()這個方法,$this
分別代表這三個對象,調用相應的屬性,列印出屬性的值,這就是在對象內部訪問對象屬性的方式,如果相在say()這個方
法里調用run()這個方法也是可以的,在say()這個方法中使用$this->run()的方式來完成調用。

㈡ php面向對象問題

定義了一堆的行為的編碼
比如 'field','where','order','limit','offset','having','group','distinct','data'
方法如果是這些的一個方法的話,那麼是去取參數1 的 這部分元素

__call('field', $arg1);
返回 $arg1->_options['field']

__call('sum', $arg1)

$arg1->get_field($method.'('.$field.') AS `count`');

__call('get', $arg1)
call_user_func_array(array(&$this, $matches[1].'_by'), $args);

不懂的地方可以在裡面插入print_r 變數輸出看看有哪是怎麼回事就可以了。

㈢ 誰能給點如何用PHP以面向對象的思路編程的啊

說實話,面向對象涉及的東西真的有點多,不僅僅是書上說的所謂「三大特徵」(繼續、封裝、多態),還有更多的內容。比如說該把系統分解那些對象,抽象出那些類,兩個類之間是用繼承還是聚合,如何管理開發過程,使用那種表示法,如何維護設計的一致性等等。而且確定合適的類和對象並不是一次就能搞定的,這常常需要多次循環才能確定合適的對象。所以建議找本書看看,網上的這些內容要麼不可靠、要麼是零散的。

㈣ php中面向對象的構造方法

什麼叫"是傳遞的時候會自動的分配參數"?編譯器不會聰明到看到一個參數的值是「男」,然後就自動把它分配給sex屬性。它只能很傻地按照順序匹配。
在你的例子中,$weightlifting = new WeightLifting('明日','185','80','20','男') 多了一個參數,所以最後一個參數實際上是被忽略掉了,而$weightlifting 的sex的屬性值實際上是"20「。

你可以在父類裡面再加個函數自己輸出試試看 ,
function showStatus(){
echo 'name is :'.$this->name.'<br>';
echo 'age is :'.$this->age.'<br>';
echo 'avoirpois is :'.$this->avoirpois.'<br>';
echo 'sex is :'.$this->sex.'<br>';
}
輸出 echo $weightlifting->showStatus();

㈤ PHP進階:面向對象及TP5框架初識

面向過程就是你把代碼封裝成子過程或函數(procere),然後依次去做一件事情;
面向對象就是你把要做的事情抽象成對象,然後告訴具體的那一個對象去做。
面向對象三大特性(封裝,繼承,多態)使得在做復雜的事情的時候效率和正確率得到保證。

在實際的編程中「面向對象」和「面向過程」兩種開發思想一定是同時都用到了的,現在宣傳最多的「面向對象」實際上是以面向對象為主題,面向過程為輔助,往往過分了誇大其作用。

㈥ php面向對象有什麼用

php程序編寫分總分兩種方式,分別為面向過程和面向對象,用兩者比較你會更容易理解些
以下資料庫操作為例:
面向過程:
$conn = mysql_connect('127.0.0.1', 'root', '123456') or die('連接不成功!');
mysql_select_db('test', $conn) or die('資料庫不存在!');
$queryid = mysql_query("select * from sort");
while ($rs = mysql_fetch_assoc($queryid)) {
echo $rs['name'], '<br>';
}
過程的代碼給人感覺比較亂,不易管理,以下實現以上代碼一樣的功能,但代碼清楚多了。
面向對象就是把常用的功能封裝為一個類,類由屬性和方法組成:
把以上過程代碼封裝成類,以文件形式保存為db.php
class db {
private $conn; //屬性
private $queryid; //屬性
//構造函數
public function db($host, $dbuser, $dbpasswd, $dbname) {
$this->conn = mysql_connect($host, $dbuser, $dbpasswd) or die('連接不成功!');
mysql_select_db($dbname, $this->conn) or die('資料庫不存在!');
}
//查詢方法
public function query($sql) {
$this->queryid = mysql_query($sql, $this->conn);
}
public function fetch_assoc() {
return mysql_fetch_assoc($this->queryid);
}
}

//在a.php文件中實例化,代碼使用變得簡結和容易理解,代碼的重用性
inclode('db.php');
$db = new db('127.0.0.1', 'root', '123456', 'test');
$db->query("select * from sort");
while ($rs = $db->fetch_assoc()) {
echo $rs['name'], '<br>';
}

㈦ 大家是如何理解PHP編程中的「面向對象」呢

你的理解很形象了, PHP的面向對象功能很弱的, 並不是完全的面向對象的。 你可以理解PHP中的類是帶屬性和方法的結構。 類定義只是定義,類實例才是真正的實現。

㈧ php面向對象都包括什麼東西啊我學了好久的面向對象了都搞不清楚

與html無關
面向對象簡單的講就中把常用的代碼封閉為class,方便使用。
以資料庫連接為例:
平時你應是這樣做的
<?php
$conn = @mysql_connect('192.168.1.180', 'admin', '123456') or die('連接失敗');
mysql_select_db('ecshop', $conn);
$query = mysql_query("SELECT * FROM ecs_admin_user");
while ($row = mysql_fetch_assoc($query)) {
echo $row['user_name'];
}

//以上代碼屬面向過程,現在可以用面向對象方式實現
//以下是面向對象實現
class DB {

private $conn;
public $dbhost = '127.0.0.1'; //對象屬性,默認主機地址
public $dbuser = 'root'; //對象屬性,默認資料庫用戶名
public $dbpass = ''; //對象屬性,默認密碼
public $dbname = ''; //對象屬性,資料庫名

public function __construct($dbhost = '', $dbuser = '', $dbpass = '', $dbname = '') {
$this->dbhost = !empty($dbhost) ? $dbhost : $this->dbhost;
$this->dbuser = !empty($dbuser) ? $dbuser : $this->dbuser;
$this->dbpass = !empty($dbpass) ? $dbpass : $this->dbpass;
$this->dbname = !empty($dbname) ? $dbname : $this->dbname;
}

//對象方法,連接
public function connect() {
$this->conn = @mysql_connect($this->dbhost, $this->dbuser, $this->dbpass) or die('連接失敗');
mysql_select_db($this->dbname, $this->conn);
}

//對象方法,詢查方法,查詢並返回數組結果
public function query($sql) {
$query = mysql_query($sql);
$data = array();
while ($row = mysql_fetch_assoc($query)) {
$data[] = $row;
}
return $data;
}

//對象方法,關閉連接
public function close() {
mysql_close($this->conn);
}

}

//這就中一個簡單的數據連接和查詢類,你可以保存到一php文件,以後引入它就用可以用了,下面實例化
//實例1
$db = new DB('192.168.1.180', 'admin', '123456', 'ecshop');
$db->connect();
$result = $db->query("SELECT * FROM ecs_admin_user");
foreach ($result as $rs) {
echo $rs['user_name'], '<br>';
}
//實例2
$db = new DB();
$db->dbhost = '192.168.1.180';
$db->dbuser = 'admin';
$db->dbpass = '123456';
$db->dbname = 'ecshop';
$result = $db->query("SELECT * FROM ecs_admin_user");
foreach ($result as $rs) {
echo $rs['user_name'], '<br>';
}

//實例3
$db = new DB('192.168.1.180', 'admin', '123456', 'ecshop');
$db->connect();
$result = $db->query("SELECT * FROM ecs_admin_user");
foreach ($result as $rs) {
echo $rs['user_name'], '<br>';
}
$db->close();
//切換數據連接
$db->dbname = 'wordpress';
$db->connect();
$result = $db->query("SELECT * FROM wp_users");
foreach ($result as $rs) {
echo $rs['user_login'], '<br>';
}
?>

㈨ PHP的面向對象究竟是什麼概念

這樣說吧,
在我們初步學習的面向過程程序設計方法,比如C語言中:
程序=演算法+數據結構;

但是面向對象程序設計方法,如C++,和後來的PHP等語言:
程序=(演算法+數據結構);

就是說演算法與數據結構組成一個整體,而這個整體就是類,把類詳細化了就是一個一個具體的對象。

比如定義一個類,再用類聲明一個對象:
class Student()
{....functions()
protected:
int a;
char b;
}
Student xiao;

Student就是一個類,xiao就是一個對象。

像樓主說的那樣,對象除了封裝方法(我們也可以稱之為演算法)之外,還可以有一些數據成員,比如上面的a,b,所以類封裝不只封裝了演算法,還有這些演算法之下的數據!

從某方面來說,面向對象是函數的升級,因為這類也是可以在主函數外定義的,這也可以將其看作是一種特殊的函數(個人看法啊),我們可以調用這「函數」中的數據和方法。所以樓主說的在廣義上也是成立的!

另外,建議樓主先閱讀下C++有關課程的關於面向對象的論述,可能會對你有所幫助!

㈩ 如何更好的學習PHP的面向對象

我覺得首先「是面向對象」的知識要先有一定的了解,比如基本的封裝,繼承,多態;其次是對php的那套魔術字,魔術方法要有一定的了解。在學習玩這些之後,可以試著實現一些設計模式的實例。最後有能力的話可以去嘗試看看php的源代碼。

熱點內容
壓縮機油洗 發布:2024-05-17 00:59:44 瀏覽:169
秋天的密碼是什麼 發布:2024-05-17 00:55:56 瀏覽:151
java培訓的價格 發布:2024-05-17 00:38:43 瀏覽:136
茶杯頭哪個配置最好 發布:2024-05-17 00:37:58 瀏覽:823
伺服器kirin是什麼意思 發布:2024-05-17 00:29:45 瀏覽:959
電腦伺服器散熱供暖 發布:2024-05-16 23:46:54 瀏覽:500
滬江網校安卓怎麼倍速播放 發布:2024-05-16 23:19:25 瀏覽:398
支付寶怎麼設置登陸密碼怎麼設置密碼 發布:2024-05-16 23:18:07 瀏覽:835
為什麼修改wifi密碼後無法加入 發布:2024-05-16 23:03:04 瀏覽:738
車機安卓未知來源在設置哪裡 發布:2024-05-16 22:31:48 瀏覽:795