讲了7节了,终于说到重头戏了。
数组,将关联的数据,放在内存中。
举一个例子,比如说一个班级,有一个班级号,班级名,描述,房间号,教导员,班级人数。可以存到一个数组内,这样写:
$class_array[0] = "CS122";// class number$class_array[1] ="Programming Concepts 1";// class name$class_array[2] ="Basic concepts of the PHP language.";// description$class_array[3] = "B123"; // room$class_array[4] = "Dr. Abraham Excell";// instructor$class_array[5] = 50;// number of students
上面这个数组,是随用随建的。用的时候赋值,一般呢,我们明确知道的,用下面的方式书写:
$class_array = array( 'CS122', 'Programming Concepts 1', 'Basic concepts of the PHP language.', 'B123', 'Dr. Abraham Excell', 50);
一目了然。大家看到,这个数组内存储的有整型,有字符串,类型不一样,都可以放在一起。这与我们在强类型语言内看到的,声明数组之前,必须指定数组的长度,数组元素的数据类型,不一样,不一样,不一样!
要不说PHP没有真正的数组呢。PHP的数组,说白了,就是键值映射数据对。
把上面额数组,使用var_dump打印出来,看一下数组的结构。我们发现,数组是默认从0开始,使用正整数作为键,存储数据的。
PHP的数组也的确是这样的机制,它还支持明确指定数组的键,也就是键值对存储。看下面的额数据:
$class_array["class number"] = "CS122";$class_array["class name"] = "Programming Concepts 1";$class_array["description"] = "Basic concepts of the PHP language.";$class_array["room"] = "B123";$class_array["instructor"] = "Dr. Abraham Excell";$class_array["number of students"] = 50;
这次,我们使用的键是字符串型。
我们同样使用var_dump打印其内部结构。
键由字符串组成的。
上面的是一维数组,简单数组。当然,数组也支持元素为数组,比如下边这样。
$class_array = array( array( 'CS122', 'Programming Concepts 1', 'Basic concepts of the PHP language.', 'B123', 'Dr. Abraham Excell', 50 ), array( 'CS123', 'Programming Concepts 2', 'Advanced concepts of the PHP language.', 'B124', 'Dr. Abraham Excell', 50 ));
这个是二维数组。后面章节再详细说。
PHP是一门面向对象的语言。类由属性和方法组成。对象是类的实例。
自 PHP 5 起完全重写了对象模型以得到更佳性能和更多特性。这是自 PHP 4 以来的最大变化。PHP 5 具有完整的对象模型。
类的访问控制
对属性,或者方法的访问,通过再其前面添加关键字来实现。
一共有三种控制级别,public,private,protected。
public定义共有类成员,可以在任何地方被访问;
private定义私有类成员,只能在定义的类内使用和访问,不能继承,不能外部访问。
protected定义受保护的类成员,可以被自身,子类,和父类访问。
默认,是公有,属性和方法。
说概念不直观,来看例子。
先声明一个类,然后用new关键字实例化出来一个对象。然后这个对象就继承了类的所有属性和方法。
因为有访问控制,所以只有公有的方法和属性,才能访问。private,protected的属性和方法,是没有权限访问到的。
上面是项目中的一个完整的类。使用var声明的属性,默认是public公有属性。
特别i地,__construct()方法,是在该类实例化的时候,会执行其中的代码。该方法接收一个$path参数,在实例化的时候,会进行传入。
其他方法,因为没有特别说明为public/private/protected,因此默认public。可外部访问。
下面看一下业务逻辑中,有都是如何使用这个类的。
$smarty = new template(ROOT_PATH . 'upgrade/templates/');
直接用new关键字,实例化。传入一个字符串参数,在实例化的时候,会执行__construct()方法。接着$smarty就可以自由访问template类的所有公有属性和方法了。
$smarty->assign('page_title', $position['title']); // 页面标题$smarty->assign('ur_here', $position['ur_here']); // 当前位置$smarty->display('activity.dwt');
大家可以看到,遵循规则定义,使用类和对象,程序封装的更为简洁了。