这次我们讨论关于“构造函数”的问题。
上次我们尝试着定义了“属性”并设置了“属性”的值,通过“方法”成功的取出了属性值。但你要知道,在现实中我们通常不这样来做,我们在定义类的时候,通常是有目的性的,大多数类通常都具备一些固定的属性,比如说我们定一个类,名字叫“人类”,人类不管是男人女人非洲亚洲黄色棕色春哥还是曾哥,都只有一个脑袋。。这就表明它具备一个固定属性,如果我们在应用中需要使用这样类似的固定属性,那么我们难道要每使用一次,就要定义一次么?当然不需要,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来显示属性的具体值。
其实以上赋值与取值的过程,我们用数组完全可以实现,但他们彼此的意义却又本质的不同,数组中的数据我们是不可控的,同时也是无法得到保护的,我们通过构造函数来实现这样的操作,就意味着整个数据的传递过程是完全被我们控制的,外界是无法改变它的。
阅读(1304) | 评论(0) | 转发(0) |