您的位置:首页 > 编程语言 > PHP开发

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>";

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: