-
PHP 部分语法(二)
array() 创建数组:
1、数值数组:带数字 ID 键的数组
2、关联数组:带有指定键的数组,键关联一个值
3、多维数组:包含一个或多个数组的数组
$arr = array("Hello", "World"); // 数值数组 $age = array("Peter" => "35", "Ben" => "37"); // 关联数组 echo $age["Peter"]; // 35
数组方法:
1、count($arr):获取长度
2、foreach($array as $value):遍历数组
$arr = array(1, 2, 3, 4, 5); echo count($arr).PHP_EOL; // 输出长度 5 foreach ($arr as $num) // 依次输出数组中的元素 echo "$num".PHP_EOL;
3、sort($arr)、rsort($arr):对数组进行升序、降序排序
$arr = array(6, 7, 1, 4, 5); sort($arr); // 升序排列 foreach ($arr as $num) echo $num.PHP_EOL; rsort($arr); // 降序排列 foreach ($arr as $num) echo $num.PHP_EOL;
4、asort($arr)、arsort($arr):根据关联数组的值进行升序、降序排序
$arr = array("1" => 3, "2" => 2, "3" => 1); asort($arr); foreach ($arr as $a) // 1 2 3 echo $a.PHP_EOL; arsort($arr); foreach ($arr as $a) // 3 2 1 echo $a.PHP_EOL;
5、ksort($arr)、krsort($arr):根据关联数组的键进行升序、降序排序
$arr = array("1" => 3, "2" => 2, "3" => 1); ksort($arr); foreach ($arr as $a) // 3 2 1 echo $a.PHP_EOL; krsort($arr); foreach ($arr as $a) // 1 2 3 echo $a.PHP_EOL;
超级全局变量:
1、$GLOBALS:包含了全部变量的全局组合数组,变量名就是数组的键
2、$_SERVER:一个包含诸如头信息、路径以及脚本位置等信息的数组
$x = 15; function test() { $GLOBALS["x"] = 5; } test(); echo $x.PHP_EOL; // 5 echo $_SERVER["PHP_SELF"]; // 当前执行脚本文件名
3、$_REQUEST:用于收集 HTML 表单提交的数据
4、$_POST:广泛用于收集表单数据,在 HTML 的 form 标签指定 post
5、$_GET:广泛用于收集表单数据,表单属性为 "method = get"
类:
1、使用 class 关键字后加上类名定义
2、类名后用一对大括号在里面定义变量和方法
3、类的变量使用 var 来声明,变量也可以初始化值
4、函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化对象访问
5、变量 $this 代表自身对象,PHP_EOL 为换行符
6、使用 new 来实例化一个类对象
7、构造函数:function __construct([mixed $args[, $...]])
8、析构函数:function __destruct(void)
9、使用 extends 来继承一个类,PHP 不支持多继承
10、我们可以把从父类继承来的方法进行改写,以满足子类需求
11、我们可以在属性或方法面前加上访问控制的关键字来实现访问控制,默认为 public
12、PHP 不会在子类的构造方法中自动调用父类的构造方法
13、若要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct()
14、若子类没定义构造方法,则会继承父类的
class Greeter { var $name; function __construct($your_name) { $this->$name = $your_name; echo "<p>In Greeter</p>"; } function say() { return "Hello ".$this->$name."!"; } } $greet = new Greeter("Lemon"); // In Greeter echo $greet->say(); // Hello Lemon! class Say extends Greeter { function __construct() { echo "<p>In Say</p>"; parent::__construct("Yam"); } } $say = new Say(); // In Say In Greeter echo $say->say(); // Hello Yam!
注:自 PHP5.3.0 起,可用一个变量来动态调用类,但变量值不能为关键字
可把类中始终不变的值定义为常量,常量必须是一个定值,定义及使用时不需使用 $
接口:
1、使用 interface 来定义接口(指定某个类需要实现哪些方法,但不需要定义它们)
2、所有的方法必须公有
3、使用 implements 来实现接口中的所有方法,可实现多个接口,接口间用逗号隔开
interface test { public function get_name(); public function set_name($name); } class information implements test { var $name; function __construct($your_name) { $this->$name = $your_name; } // 若下面的方法有一个没实现则会报错 function get_name() { return $this->$name; } function set_name($your_name) { $this->$name = $your_name; } } $info = new information("Lemon"); echo $info->get_name().PHP_EOL; // Lemon $info->set_name("Yam"); echo $info->get_name(); // Yam
抽象类:
1、任何一个类,如果里面至少有一个方法是抽象的,则该类必须为抽象的
2、抽像类不能被实例化(abstract)
3、继承一个抽象类时,子类必须定义抽象父类的所有抽象方法,且访问控制必须和父类一样或更宽松
abstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . PHP_EOL; } } class ConcreteClass extends AbstractClass { protected function getValue() { return "ConcreteClass"; } // 比原来更加宽松 public function prefixValue($prefix) { return "{$prefix}ConcreteClass"; } } $class1 = new ConcreteClass; $class1->printOut(); echo $class1->prefixValue('FOO_') . PHP_EOL;
static 关键字:
1、声明类属性或方法为 static 就可以不实例化而直接访问
2、静态属性不能通过一个类已实例化的对象来访问,但静态方法可以
3、由于静态方法不需要通过对象即可调用,所以伪变量 $this 不可用
4、静态方法不可以由对象通过 -> 操作符来访问
class Test { public static $num = 1; public function add_num() { echo ++self::$num.PHP_EOL; } } echo Test::$num.PHP_EOL; // 1 $test = new Test(); $test->add_num(); // 2 $test->add_num(); // 3 $test = new Test(); $test->add_num(); // 4
final 关键字:
1、若父类中的方法被声明为 final,则子类无法覆盖该方法
2、若一个类被声明为 final,则不能被继承