php面向对象全攻略
㈠ 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的源代码。