原文作者 刀客羽朋 ,这里重新整理,出处: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
2class person{
3private $name="noname";
4public function getName(){
5 return $this->name;
6 }
7}
8$p=new person();
9echo "his name is ".$p->getName();
10?>
① 在方法内部通过
$this-> 符号调用同一对象的属性;
② 上面的例子,通过方法(函数)getName()就完成了获取private $name的值,调用getName()方法就会通过 return $this->name返回$name的值。但有一点要注意:虽然通过getName(),用户可获取$name,但不能改变他的值,这就是封装的好处。
带参数的方法
可以在方法中加入参数,如下例:
方法中带参数
1
2<?php
3class 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");
14echo $p->getA();
15?>
方法内接受的变量是局部变量,只能在方法内部有效。可以通过向属性传递变量值的方式,让这个(局部)变量应用于整个对象。
如果声明的这个方法有参数,而调用这个方法时没有参数或参数数量不足,系统会报错误,如下例:
Code
1<?php
2class 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( ); //因为在定义方法时,己声明有参数,如果调用这个方法时不带参数,系统将有错误。
13echo $p->getA();
14?>
还可以在定义方法时,给参数带上默认值:
Code
1<?php
2class 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( );
13echo $p->getA();
14
15?>
方法中的参数还可以指向对象,如下例:
Code
1<?php
2class A{
3 public $name="Tom";
4 }
5class 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()方法,将对象传入
17echo $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
3require_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); //返回查询结果到数组
10mysql_close($conn); //关闭数据库
11
12$username=$userInfo["name"]; //将数据从数组取出
13$useraddress=$userInfo["address"];
14$usercity=$userInfo["city"];
15
16echo "your name is ".$username.".<br>";
17echo "your address is ".$useraddress.".<br>";
18echo "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
3class 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
3require_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
11echo "your name is ".$username.".<br>";
12echo "your address is ".$useraddress.".<br>";
13echo "your city is ".$usercity.".<br>";
14?>