Array

数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

概述

看到上面一大串官方的介绍是不是感觉有点蒙圈,我来用我的理解给你介绍一下我眼中的数组:

数组就是一个可以把相互关联的任意类型数据组合在一起的集合单元,以便进行批量处理的变量。

在这里我只给大家简单介绍一下数组的基本概念,在后面的课程里,我会专门分出一大章节为大家详细介绍数组的定义使用。等不及啦?点这里带你传送过去

数组的声明

接下来我给大家展示一下数组的两种声明方式,也是最常见的声明方式:看不懂没关系,这里只做了解。


<?php
// 通过方括号声明一个数组
$array_num    = ['One', 'Two', 'Three'];
// 通过 array() 语言结构来声明一个数组
$array_people = array('name' => 'VAGH', 'age' => 30, 'adderss' => '...');
        

在 PHP 中,我们一般会把数组中的元素称作“键值对”,他们之间的关系用 => 来表达。在前为键,在后为值。上面的示例中,可以看出数组是使用 array() 和 方括号 [] 来声明的。$key => $value 是其中的键值对。

数组的访问

如果要访问数组中的某个键的值,我们就可以使用数组的键来输出。例如,我要访问上述示例中 $array_num 中的第三个值,就可以使用 $array_num[2] 来输出。为什么是 2 而不是 3 呢?因为所有数组的索引都是从 0 开始的,所以就是第 2 个啦。如果我选个访问 $array_people 中的 name 的值,就可以通过 $array_people['name'] 来输出名字。为什么这个例子不用数字而是用一个字符串来输出呢?因为这是一个 关联数组,而上一个数组是一个 索引数组。关于这两个数组的区别和用法,我会在以后的“数组”一章中详细介绍。

object

对象

类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。

概述

没错,这就是有关程序员段子里经常提到的“找不到对象”的来源了,此对象非彼对象。学习这篇文章只能带你认识了解 PHP 中对象的概念,并不会教你怎么找到一个对象…

PHP 中的对象和数组一样,都是复合数据类型。但对象又比数组高一个台阶。对象可以拥有属性(外观,形状,描述,数据等等)和方法(行为,动作,功能等等),属性可以表明对象的状态,方法提供了这个对象的功能。

相对于数组来说,对象有着更加强大的功能。同样,这里只做简单的介绍,让你对对象有一个初步的认识,和数组一样,我会在后面的章节中专门介绍对象这个概念,你只需要在这里了解即可。

对象的声明

我们可以使用 class 关键字来声明一个对象,然后在对象体内用其他关键字声明方法和属性,以下示例仅做示范,看不懂很正常,我会在以后的章节中详细讲解类的声明。


<?php

// 使用 class 关键字声明名为 wowphp 的一个类
class wowphp {

	// 定义一个成员属性 $url
	var $url = 'wowphp.com';

	// 定义一个成员方法 名为 teach
	function teach()
    {
    	// 方法的功能是输出一个字符串
        echo "Let me tell you something..."; 
    }

    function getUrl()
    {
    	// 将成员属性输出
    	echo $this->url;
    }
}
        

对象的使用

声明了一个对象后,如何使用呢?我们需要使用 new 关键字来实例化一个对象。将实例化的值赋给一个变量,就可以用这个变量来使用对象中的方法和属性了。请看以下示例:


<?php

// 使用关键字 new 来实例化一个类 并赋值给 webSite 变量
$webSite = new wowphp();
// 调用类中的 getUrl 方法 将会输出 “wowphp.com”
$webSite->getUrl();
// 调用类中的 teach 方法 将会输出 “Let me tell you something...”
$webSite->teach();
        
Callable

回调函数类型

自 PHP 5.4 起可用 callable 类型指定回调类型 callback。一些函数如 call_user_func() 或 usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。

概述

什么是回调函数呢?从字面意思上来说,就是需要有一个事件来触发,之后调用的函数。通俗的来说,回调函数是一个我们定义的函数,但是不是我们直接来调用,而是通过另一个函数来调用,这个函数通过接收回调函数的名字和参数来实现对它的调用。

PHP 提供了两个内置函数 call_user_func()call_user_func_array() 提供对回调函数的支持。而且在 PHP 中,回调函数的应用也很广泛,你可能在不经意间就使用了它~

由于我们还没有正式向你介绍过对象和类的用法,下面这个介绍回调函数的例子对你来说可能就比较难看懂了。不过没关系,你可以在后面的章节中学习了对象和类之后,回过头来再看看这一部分的概念,因为这一部分对刚起步的新手来说,没有立刻学习的必要。

回调函数的使用

我将要写一个函数,来输出被调用时它所接收到的参数,和它本身。然后让它作为回调函数被调用,以便向你展示回调函数的使用方法。请看示例:


<?php     
// 普通函数    
function funcInfo($arg1, $arg2)    
{    
   echo __FUNCTION__.' has been execed,the args is: '.$arg1.' and '.$arg2;    
   echo "<br/>";    
}

// 通过call_user_func调用函数funcInfo    
call_user_func('funcInfo', 'VAGH', 'Seven');

// 通过call_user_func_array调用函数    
call_user_func_array('funcInfo', array('VAGH', 'Seven'));

// 以上两个函数执行后都会输出:funcInfo has been execed,the args is: VAGH and Seven
        

我们可以很清楚的看出来,调用回调函数的函数有两个,也是上文提及的两个方法:call_user_funccall_user_func_array。他俩之间的区别就是传递参数时,一个传字符串,一个传递数组。下面的一块代码是向你展示回调函数在对象中的使用方法:


<?php

class Wowphp    
{    
   public $name;    

   function show($arg1)    
   {    
       echo 'The arg is:'.$arg1."<br/>";
       echo 'My name is:'.$this->name;
       echo "<br/>";    
   }    
   function show1($arg1,$arg2)    
   {    
       echo __METHOD__.' exec,the args is:'.$arg1.' '.$arg2."<br/>";    
   }    
   public static function show2($arg1,$arg2)    
   {    
       echo __METHOD__.' of class Wowphp exec, the args is:'.$arg1.' '.$arg2."<br/>";    
   }
}

// 调用类中非静态成员函数,该成员函数中有$this调用了对象中的成员    
$woClass = new Wowphp;    
$woClass->name = 'Amber';           
call_user_func_array(array($woClass, 'show',), array('Youki'));  

// 调用类中非静态成员函数,没有对象被创建,该成员函数中不能有$this  
call_user_func_array(array('Wowphp', 'show1',), array('VAGH', 'Seven'));    

// 调用类中静态成员函数  
call_user_func_array(array('Wowphp', 'show2'), array('VAGH', 'Seven'));

// 以上代码运行后将会输出:
// The arg is:Youki
// My name is:Amber
// Wowphp::show1 exec,the args is:VAGH Seven
// Wowphp::show2 of class Wowphp exec, the args is:VAGH Seven
        

这个时候有的同学可能就会问了:在示例一中,我明显可以直接在代码中使用 funcInfo 这个函数啊,为什么非要在使用 call_user_func 这个函数来调用,岂不是多此一举?其实呢,这只是一个例子,展示一下回调函数的用法和概念,方便大家理解。在实际使用过程中,回调函数可不是这么用的。

一般来说,PHP 在许多内置函数中都会用到回调函数来处理数据,比如 array_filter 这个函数,第二个参数就是用来传递回调函数来处理第一个参数的。你可以点击这个函数名查看详细说明,或者看一下这个示例:


<?php

function foo($n, $functionName = '') {
	if ($n < 1) return;
	
	for ($i = 0; $i < $n; $i++ ) {
		// 有回调函数时,使用回调函数
		echo $functionName ? $functionName($i) : $i;
	}
}

// 无回调时
foo(5); // 输出 01234
 
// 有回调时
function callFunc($v) {
	return $v + $v;
}

foo(5, 'callFunc'); // 输出02468
        

请登录

WOWPHP 账号登录 GitHub 账号登录

还没有账号?现在去注册一个~