Chinaunix首页 | 论坛 | 博客
  • 博客访问: 754149
  • 博文数量: 26
  • 博客积分: 8255
  • 博客等级: 中将
  • 技术积分: 934
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-06 01:52
文章分类

全部博文(26)

文章存档

2012年(1)

2011年(8)

2010年(10)

2008年(7)

分类:

2010-02-03 10:29:04

这次我们讨论关于“构造函数”的问题。

上次我们尝试着定义了“属性”并设置了“属性”的值,通过“方法”成功的取出了属性值。但你要知道,在现实中我们通常不这样来做,我们在定义类的时候,通常是有目的性的,大多数类通常都具备一些固定的属性,比如说我们定一个类,名字叫“人类”,人类不管是男人女人非洲亚洲黄色棕色春哥还是曾哥,都只有一个脑袋。。这就表明它具备一个固定属性,如果我们在应用中需要使用这样类似的固定属性,那么我们难道要每使用一次,就要定义一次么?当然不需要,PHP提供了构造函数,来解决这个问题(当然了,所有面向对象编程都有个东西)。

记住,当我们给一个类创建对象的时候,PHP会自动检索是否存在“构造函数”,它每次都这么做。所以如果你有什么需要“初始化”的东西,尽管往构造函数中放吧。

在PHP5中,我们通过 __construct()来表示构造函数。我们继续通过上一次的例子演示构造函数的使用:



<?php
class Product
{
// 以下定义的是一个属性
protected $_type;
protected $_title;
// 构造函数
public function __construct($type, $title)
{
$this->_type = $type;
$this->_title = $title;
}
// 以下定义具体的方法
public function getProductType()
   {
     return $this->_type;
   }
public function getTitle()
   {
     return $this->_title;
   }
}


我们打开test.php 文件,修改为如下代码:

<?php
//调用Product类文件
require_once 'Product.php';
//创建产品对象
$product1 = new Product('Book', 'PHP Object-Oriented Solutions');
$product2 = new Product('DVD', 'Atonement');
//显示产品属性
echo '

$product1 is a ' . $product1->getProductType();
echo ' called "' . $product1->getTitle() . '"

';
echo '

$product2 is a ' . $product2->getProductType();
echo ' called "' . $product2->getTitle() . '"

'
;


在类文件中,我们定义了两个属性,$_type,$_title 我们通过构造函数的参数传递来给这两个属性赋值,当然了,在实际环境中,我们不需要这么做,如果你真的有默认值要设定,直接在构造函数中定义好就行了,不需要通过参数传递,这样做只是为了程序演示。

在test.php文件中,我可以看到,在创建产品对象的时候,我们直接通过参数的传递为Product类指定了其默认属性,而不需要在通过其他的方法赋值。然后,我们通过getProductType来显示属性的具体值。

其实以上赋值与取值的过程,我们用数组完全可以实现,但他们彼此的意义却又本质的不同,数组中的数据我们是不可控的,同时也是无法得到保护的,我们通过构造函数来实现这样的操作,就意味着整个数据的传递过程是完全被我们控制的,外界是无法改变它的。
阅读(1277) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~