php5面向对象入门 (一)
2009-01-02 22:20
330 查看
原文作者 刀客羽朋 ,这里重新整理,出处: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();
?>
① 在方法内部通过 $this-> 符号调用同一对象的属性;
② 上面的例子,通过方法(函数)getName()就完成了获取private $name的值,调用getName()方法就会通过 return $this->name返回$name的值。但有一点要注意:虽然通过getName(),用户可获取$name,但不能改变他的值,这就是封装的好处。
带参数的方法
[/u]可以在方法中加入参数,如下例:
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
}
}
$p =new person();
$p->setA("shuwill");
echo $p->getA();
?>
方法内接受的变量是局部变量,只能在方法内部有效。可以通过向属性传递变量值的方式,让这个(局部)变量应用于整个对象。
如果声明的这个方法有参数,而调用这个方法时没有参数或参数数量不足,系统会报错误,如下例:
<?php
2class person{
3 private $a;
4 function setA($_a){
5 $this->a=$_a;
6 }
7 function getA(){
8 return $this->a;
9 }
}
$p =new person();
$p->setA( ); //因为在定义方法时,己声明有参数,如果调用这个方法时不带参数,系统将有错误。
echo $p->getA();
?>
还可以在定义方法时,给参数带上默认值:
<?php
2class person{
3 private $a;
4 function setA($_a="shuwill"){
5 $this->a=$_a;
6 }
7 function getA(){
8 return $this->a;
9 }
}
$p =new person();
$p->setA( );
echo $p->getA();
?>
方法中的参数还可以指向对象,如下例:
<?php
2class A{
3 public $name="Tom";
4 }
5class person{
6 private $a;
7 function setA($_a){
8 $this->a=$_a;
9 }
function getA(){
return $this->a;
}
}
$al=new A();
$p =new person();
$p->setA($al); //调入setA()方法,将对象传入
echo $p->getA()->name; //$p->getA() 即 $al, $p->getA()->name , 即 $al->name
?>
构造函数
构造方法又称构造函数,是对象被创建时自动调用的方法,用来完成类初始化的工作。
构造函数和其它函数一样,可以传递参数,可以设计参数默认值。
php5中构造函数的定义:
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";
?>
先写一个面向过程方式读取数据库用户的信息。
<?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); //返回查询结果到数组
mysql_close($conn); //关闭数据库
$username=$userInfo["name"]; //将数据从数组取出
$useraddress=$userInfo["address"];
$usercity=$userInfo["city"];
echo "your name is ".$username.".<br>";
echo "your address is ".$useraddress.".<br>";
echo "your city is ".$usercity.".<br>";
?>
上面的程序在显示MySQL库中的中文时,呈乱码,修改成如下代码就可以了:
<?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){
require_once("db_config.php"); //包含配置文件
$sql="select * from customers where name='$name'";
$conn= mysql_pconnect($db_sever,$db_user,$db_pwd); //建立mysql连接
$my_db=mysql_select_db($db_name,$conn); //选择数据库
$result=mysql_query($sql,$conn); //执行查询语句
$this->theUserInfo=mysql_fetch_array($result); //返回查询结果到数组
mysql_close($conn); //关闭数据库
$this->getInfo(); //调同学传递信息方法论
}
//获取信息传递给属性的方法
private function getInfo(){
$this->userName=$this->theUserInfo["name"];
$this->userAddress=$this->theUserInfo["address"];
$this->userCity=$this->theUserInfo["city"];
}
//返回每个属性的public方法.
public function getUserName(){
return $this->userName;
}
public function getUserAddress(){
return $this->userAddress;
}
public function getUserCity(){
return $this->userCity;
}
}
?>
做好了准备工作,接下来就简单了:
<?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();
echo "your name is ".$username.".<br>";
echo "your address is ".$useraddress.".<br>";
echo "your city is ".$usercity.".<br>";
?>
类和对象
类是对一类事物描述,是抽象的、概念上的定义;
对象是实际存在的该类事物的每个个体,因而也称实例(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();
?>
① 在方法内部通过 $this-> 符号调用同一对象的属性;
② 上面的例子,通过方法(函数)getName()就完成了获取private $name的值,调用getName()方法就会通过 return $this->name返回$name的值。但有一点要注意:虽然通过getName(),用户可获取$name,但不能改变他的值,这就是封装的好处。
带参数的方法
[/u]可以在方法中加入参数,如下例:
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
}
}
$p =new person();
$p->setA("shuwill");
echo $p->getA();
?>
方法内接受的变量是局部变量,只能在方法内部有效。可以通过向属性传递变量值的方式,让这个(局部)变量应用于整个对象。
如果声明的这个方法有参数,而调用这个方法时没有参数或参数数量不足,系统会报错误,如下例:
<?php
2class person{
3 private $a;
4 function setA($_a){
5 $this->a=$_a;
6 }
7 function getA(){
8 return $this->a;
9 }
}
$p =new person();
$p->setA( ); //因为在定义方法时,己声明有参数,如果调用这个方法时不带参数,系统将有错误。
echo $p->getA();
?>
还可以在定义方法时,给参数带上默认值:
<?php
2class person{
3 private $a;
4 function setA($_a="shuwill"){
5 $this->a=$_a;
6 }
7 function getA(){
8 return $this->a;
9 }
}
$p =new person();
$p->setA( );
echo $p->getA();
?>
方法中的参数还可以指向对象,如下例:
<?php
2class A{
3 public $name="Tom";
4 }
5class person{
6 private $a;
7 function setA($_a){
8 $this->a=$_a;
9 }
function getA(){
return $this->a;
}
}
$al=new A();
$p =new person();
$p->setA($al); //调入setA()方法,将对象传入
echo $p->getA()->name; //$p->getA() 即 $al, $p->getA()->name , 即 $al->name
?>
构造函数
构造方法又称构造函数,是对象被创建时自动调用的方法,用来完成类初始化的工作。
构造函数和其它函数一样,可以传递参数,可以设计参数默认值。
php5中构造函数的定义:
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";
?>
先写一个面向过程方式读取数据库用户的信息。
<?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); //返回查询结果到数组
mysql_close($conn); //关闭数据库
$username=$userInfo["name"]; //将数据从数组取出
$useraddress=$userInfo["address"];
$usercity=$userInfo["city"];
echo "your name is ".$username.".<br>";
echo "your address is ".$useraddress.".<br>";
echo "your city is ".$usercity.".<br>";
?>
上面的程序在显示MySQL库中的中文时,呈乱码,修改成如下代码就可以了:
<?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){
require_once("db_config.php"); //包含配置文件
$sql="select * from customers where name='$name'";
$conn= mysql_pconnect($db_sever,$db_user,$db_pwd); //建立mysql连接
$my_db=mysql_select_db($db_name,$conn); //选择数据库
$result=mysql_query($sql,$conn); //执行查询语句
$this->theUserInfo=mysql_fetch_array($result); //返回查询结果到数组
mysql_close($conn); //关闭数据库
$this->getInfo(); //调同学传递信息方法论
}
//获取信息传递给属性的方法
private function getInfo(){
$this->userName=$this->theUserInfo["name"];
$this->userAddress=$this->theUserInfo["address"];
$this->userCity=$this->theUserInfo["city"];
}
//返回每个属性的public方法.
public function getUserName(){
return $this->userName;
}
public function getUserAddress(){
return $this->userAddress;
}
public function getUserCity(){
return $this->userCity;
}
}
?>
做好了准备工作,接下来就简单了:
<?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();
echo "your name is ".$username.".<br>";
echo "your address is ".$useraddress.".<br>";
echo "your city is ".$usercity.".<br>";
?>
相关文章推荐
- php5面向对象入门(二)
- php5面向对象入门 (四) 接口
- php5面向对象入门(三)
- 面向对象入门
- [翻]OOSE第3章:面向对象知识入门3.1
- 第一章:你首先需要知道的(面向对象入门)
- JavaSE入门学习13:Java面向对象之封装
- [译]OOSE第3章:面向对象知识入门 3.5 Inheritance+3.6
- JavaScript基础系列14---面向对象入门
- JavaSE入门学习15:Java面向对象之继承
- JavaSE入门学习17:Java面向对象之package(包)
- 面向对象系统设计入门——经典书籍(提供下载)
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
- Python面向对象入门
- 大牛级别程序员带小白入门Python,花7天整理最全面向对象教程!
- Java面向对象入门
- python面向对象入门之getter和setter和私有变量
- 面向对象入门
- 【连载】Java学习系列(006)——面向对象入门
- 《Java从入门到放弃》JavaSE入门篇:面向对象语法二(入门版)