虚函数在各类语言的项目中几乎都有涉及。最常见到的就是在JavaScript项目中。

虚函数在各类的编程语言常规教科书中鲜有介绍,所以不认识虚函数对于读程序,会产生巨大的阻碍。

行如 function(){} 的函数叫做虚函数,虚函数没有函数名。

因为虚函数没有函数名,所以,需要定义变量对虚函数的地址做存储。地址在计算机中是程序执行的入口,存储在内存中的地址如果没有指令将它的地址交给CPU,那么程序将不会执行地址所指向的指令或者访问地址所指向的存储变量。

$func = function(args){}
$func就存储了虚函数的入口地址,调用虚函数只需要执行$func(arg)即可,arg是传入到虚函数的实参,但注意不同于普通变量,后面的括号是一定要有的,括号内放置虚函数定义时的参数。

虚函数定义就执行的情况
(function(args){})(arg);
在在虚函数体外部使用括号将整个函数定义括起来,在后面传入实参即可。可以将虚函数被括号括起来的部分看做是一个虚变量。

JavaScrip中的虚函数定义和执行与上面一致,但PHP中有些许不同。

PHP中允许虚函数在定义时直接使用已经存在的变量。function() use() {},与JavaScrip不同的是,虚函数的定义中多了一个use,use中可以传入已经定义好的参数,在虚函数执行的时候,就不必单独再传入形参。

JavaScrip示例:

<script>
var func = function(str){
	document.write(str);
}
func("helloWorld"); //被调输出helloWorld

(function(str){
	document.write(str);
})("helloWorld"); //直接输出helloWorld

</script>

PHP示例:

<php
$func = function($str){
	echo $str;
}
$func("helloWorld"); //被调输出helloWorld

(function($str){
	echo $str;
})("helloWorld"); //直接输出helloWorld

$str = "helloWorld";

$func = function() use($str){
	echo $str;
}
$func(); //被调输出helloWorld

(function($str) use($str){
	echo $str;
})(); //直接输出helloWorld

?>