原文作者 刀客羽朋 ,这里重新整理,出处:http://www.cnblogs.com/tograce/category/161526.html
类和对象
类是对一类事物描述,是抽象的、概念上的定义;
对象是实际存在的该类事物的每个个体,因而也称实例(instance)
创建对象的过程称为 创建对象 也称为实例化。
php中的类是这样定义的:
class person{


}
用new创建对象
<?php
class person{


}
$p=new person(); //创建对象
?>
php5类的属性
类中的元素主要有两个:属性和方法。
类中声明的变量,即类的属性
<?php
class person{
public $name="noname"; //定义public属性 $name.
}
$p=new person();
$p->name="tom"; //变更姓名为tom
echo "his name is ".$p->name;
?>
①用 -> 符号调用变量指向对象的属性。
②属性的修饰符除了public,还有private,protected
public (公开):可以自由的在类的内、外部读取和修改;
private(私有):只能在这个当前类的内部读取和修改;
protected(受保护):能够在这个类和类的子类中读取和修改。
③上面的实例将输出: his name is tom
如果将属性权限改为private,将有错误.
<?php
class person{
private $name="noname";
}
$p=new person();
$p->name="tom";
echo "his name is ".$p->name;
?>
如果非要获取属性name的值,难道就不行了,当然是可以的,这就要调用类的方法
php5类的方法
对对象的属性进行的操作称为对象的方法(也称为行为/操作)。
1
<?php
2
class person{
3
private $name="noname";
4
public function getName(){
5
return $this->name;
6
}
7
}
8
$p=new person();
9
echo "his name is ".$p->getName();
10
?>
① 在方法内部通过
$this-> 符号调用同一对象的属性;
② 上面的例子,通过方法(函数)getName()就完成了获取private $name的值,调用getName()方法就会通过 return $this->name返回$name的值。但有一点要注意:虽然通过getName(),用户可获取$name,但不能改变他的值,这就是封装的好处。
带参数的方法
可以在方法中加入参数,如下例:

方法中带参数
1
2
<?php
3
class person{
4
private $a;
5
function setA($_a){
6
$this->a=$_a; //局部变量 $_a 传值给属性 a
7
}
8
function getA(){
9
return $this->a; //返回属性 a
10
}
11
}
12
$p =new person();
13
$p->setA("shuwill");
14
echo $p->getA();
15
?>
方法内接受的变量是局部变量,只能在方法内部有效。可以通过向属性传递变量值的方式,让这个(局部)变量应用于整个对象。
如果声明的这个方法有参数,而调用这个方法时没有参数或参数数量不足,系统会报错误,如下例:

Code
1
<?php
2
class person{
3
private $a;
4
function setA($_a){
5
$this->a=$_a;
6
}
7
function getA(){
8
return $this->a;
9
}
10
}
11
$p =new person();
12
$p->setA( ); //因为在定义方法时,己声明有参数,如果调用这个方法时不带参数,系统将有错误。
13
echo $p->getA();
14
?>
还可以在定义方法时,给参数带上默认值:

Code
1
<?php
2
class person{
3
private $a;
4
function setA($_a="shuwill"){
5
$this->a=$_a;
6
}
7
function getA(){
8
return $this->a;
9
}
10
}
11
$p =new person();
12
$p->setA( );
13
echo $p->getA();
14
15
?>
方法中的参数还可以指向对象,如下例:

Code
1
<?php
2
class A{
3
public $name="Tom";
4
}
5
class person{
6
private $a;
7
function setA($_a){
8
$this->a=$_a;
9
}
10
function getA(){
11
return $this->a;
12
}
13
}
14
$al=new A();
15
$p =new person();
16
$p->setA($al); //调入setA()方法,将对象传入
17
echo $p->getA()->name; //$p->getA() 即 $al, $p->getA()->name , 即 $al->name
18
?>
构造函数
构造方法又称构造函数,是对象被创建时自动调用的方法,用来完成类初始化的工作。
构造函数和其它函数一样,可以传递参数,可以设计参数默认值。
php5中构造函数的定义:

Code
class person{
private $name;
public function __construct($name){
$this->name=$name;
echo "在类被初始化时,这里的代码会运行<br >";
echo "$name is ". $this->name."<br>";
}
}
new person("shuwill");
new person("书维");
?>
看看结果是什么样子的?
在类被初始化时,这里的代码会运行
$name is shuwill
在类被初始化时,这里的代码会运行
$name is 书维
面向对象实例
假如有一名为books的数据库:
先写一个数据库配置文件:
<?php
//db_config.php
$db_server="localhost";
$db_user="root";
$db_pwd="tograce";
$db_name="books";
?>
先写一个面向过程方式读取数据库用户的信息。

Code
1
<?php
2
//view_user_mysql_process.php
3
require_once("db_config.php"); //包含配置文件
4
$sql="select * from customers where name='toGrace'";
5
6
$conn= mysql_pconnect($db_sever,$db_user,$db_pwd); //建立mysql连接
7
$my_db=mysql_select_db($db_name,$conn); //选择数据库
8
$result=mysql_query($sql,$conn); //执行查询语句
9
$userInfo=mysql_fetch_array($result); //返回查询结果到数组
10
mysql_close($conn); //关闭数据库
11
12
$username=$userInfo["name"]; //将数据从数组取出
13
$useraddress=$userInfo["address"];
14
$usercity=$userInfo["city"];
15
16
echo "your name is ".$username.".<br>";
17
echo "your address is ".$useraddress.".<br>";
18
echo "your city is ".$usercity.".<br>";
19
?>
上面的程序在显示MySQL库中的中文时,呈乱码,修改成如下代码就可以了:

正确显示中文的Code
$conn=mysql_connect($db_server,$db_user,$db_pwd); //建立连接,
mysql_query("set names 'gbk'");//这就是指定数据库字符集,一般放在连接数据库后面就系了
$my_db=mysql_select_db($db_name);//或者直接 mysql_select_db($db_name)也行
$result =mysql_query($sql,$conn);//执行查询语句
$userInfo=mysql_fetch_array($result);//将查询结果保存在数组中
现在,写一个面向过程方式读取数据库用户的信息。
先要创建类:

Code
1
<?php
2
//class_user.php
3
class userInfo{
4
private $userName;
5
private $userAddress;
6
private $userCity;
7
private $theUserInfo;
8
9
public function __construct($name){
10
require_once("db_config.php"); //包含配置文件
11
$sql="select * from customers where name='$name'";
12
$conn= mysql_pconnect($db_sever,$db_user,$db_pwd); //建立mysql连接
13
$my_db=mysql_select_db($db_name,$conn); //选择数据库
14
$result=mysql_query($sql,$conn); //执行查询语句
15
$this->theUserInfo=mysql_fetch_array($result); //返回查询结果到数组
16
mysql_close($conn); //关闭数据库
17
$this->getInfo(); //调同学传递信息方法论
18
}
19
20
//获取信息传递给属性的方法
21
private function getInfo(){
22
$this->userName=$this->theUserInfo["name"];
23
$this->userAddress=$this->theUserInfo["address"];
24
$this->userCity=$this->theUserInfo["city"];
25
}
26
27
//返回每个属性的public方法.
28
public function getUserName(){
29
return $this->userName;
30
}
31
32
public function getUserAddress(){
33
return $this->userAddress;
34
}
35
36
public function getUserCity(){
37
return $this->userCity;
38
}
39
}
40
?>
做好了准备工作,接下来就简单了:

Code
1
<?php
2
//view_user_mysql_process.php
3
require_once("class_user.php");
4
5
$user=new userInfo("Julie Smith");
6
7
$username=$user->getUserName();
8
$useraddress=$user->getUserAddress();
9
$usercity=$user->getUserCity();
10
11
echo "your name is ".$username.".<br>";
12
echo "your address is ".$useraddress.".<br>";
13
echo "your city is ".$usercity.".<br>";
14
?>