PHP 有两种数组:索引数组、关联数组, 索引和关联两个词都是针对数组的键而言的,索引下标从 0 开始
- $students = array("mac","windows");
- $fruit = array(
- 'apple'=>"苹果",
- 'banana'=>"香蕉",
- 'pineapple'=>"菠萝"
- );
- $arr[0] = 'matrix';
- array('0'=>'matrix');
- array('matrix'); //这相当于array('0'=>'matrix')
- ///如果存在打印
- $arr=array('matrix');
- if(isset($arr))
- {
- print_r($arr);
- }
- $arr['apple'] = '苹果'
- $fruit=array('a','b','c');
- foreach($fruit as $k=>$v){
- echo '<br>第'.$k.'个值是'.$v;
- // .是连接符
- }
- $os=array('windows'=>1,'mac'=>2);
- foreach($os as $k=>$t){
- echo '<br>os:'.$k.' number:'.$t;
- }
类是面向对象程序设计的基本概念,学习一下 php 的 OOP
- class Car {
- $name = '汽车';
- function getName() {
- return $this - >name; //方法内部可以使用$this伪变量调用对象的属性或者方法
- }
- }
- $car = new Car();
- echo $car - >getName();
在类中定义的变量称之为属性,通常属性跟数据库中的字段有一定的关联,因此也可以称作 "字段"。属性声明是由关键字 public,protected 或者 private 开头,后面跟一个普通的变量声明来组成。属性的变量可以设置初始化的默认值,默认值必须是常量。
- class Car {
- //公共属性
- public $name = '汽车';
- //受保护属性,可以被自身和其子类,父类访问
- protected $color = '白色';
- //私有属性,只能在定义类的位置访问
- privcate $price = '6666666';
- }
- $car=new Car();
- echo $car->name;
- echo $car->color; //报错
- echo $car->price; //报错
面向过程的 function 叫函数,面向对象的 function 叫方法。方法的修饰也有三种:public,protected,privite. 不需要实例化就能调用的叫做静态方法,用 static 修饰,操作符为双冒号
示例代码:
- class Car {
- public function getName() {
- return '汽车';
- }
- ?}
- $car = new Car();
- echo $car->getName();
- class Car {
- public static function getName() {
- return '汽车';
- }
- ?}
- echo Car::getName(); //结果为"汽车"
PHP 可以在类中使用__construct() 定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,因此常用来在对象创建的时候进行一些初始化工作。注 :construct() 前面有两个下划线
代码示例
如果在子类中定义了_construct 则不会调用父类的构造函数,如果需要调用父类的构造函数,需要使用 parent::_construct()
- class Car{
- function __construct(){
- print "构造函数被调用了\n";
- }
- }
- $car=new Car();//此时就会调用构造函数,输出一个字符串
- class Car {
- function __construct() {
- print "parent";
- }
- }
- class Truck extends Car {
- function __construct() {
- print "child";
- parent: :__construct();
- }
- }
- $car = new Truck();
同样,PHP 支持析构函数,使用__destruct() 进行定义,析构函数指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数。
看代码就懂了
- class Car {
- function __construct() {
- print "构造函数调用了\n";
- }
- function __destruct() {
- print "析构函数调用了\n";
- }
- }
- $car = new Car(); //实例化时调用了__construct()
- echo'下面是销毁';
- unset($car); //销毁时调用了__destruct()
- //php代码执行完时会自动回收和销毁对象,因此一般情况下不用自己手动去显示销毁对象
不用实例化就能调用静态属性和静态方法
- class Car{
- private static $speed =10;
- public static function getSpeed(){
- return self::$speed;
- }
- public static function speedUp(){
- return self::$seed+=10;
- }
- }
- class BigCar extends Car{
- public static function start(){
- parent::speedUp();
- }
- }
- BigCar::start();
- echo BigCar::getSpeed();
- $func = 'getSpeed';
- $className = 'Car';
- echo $classNme: :$func();
- class Car {
- $speed = 10; //报错,无访问控制
- public $name;
- }
如果构造函数定义成了私有方法,则不允许直接实例化了,要用静态方法实例化,设计模式中经常使用这样的方法来控制对象的的创建,比如单例模式只允许有一个全局唯一的变量
例子如下
- class Car{
- private function __construct(){
- echo 'object create';
- }
- private static $_object = null;
- public static function getInstance(){
- if(empty(self::$object)){
- self::$_object = new Car();//定义处可以调用私有方法,因此可以创建对象
- }
- return self::$_object;
- }
- }
- //$car = new Car();此处如果实例化就会报错
- $car=Car::getInstance();//通过静态方法来获得实例
对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符 = = 进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符 = = = 进行判断。 未完待续
来源: http://www.bubuko.com/infodetail-2447747.html