PHP 编程/函数
函数(或在类/对象上下文中称为方法)是一种将常见任务或计算分组起来以简化重用的方法。
计算机编程中的函数很像数学函数:您可以给函数提供要处理的值并获得结果,而无需自己进行任何计算。
您还可以在PHP 手册的函数参考中找到大量预定义的 PHP 内置函数。
请注意echo不是一个函数。[1] “调用函数”意味着在脚本中的特定点导致特定函数运行。调用函数的基本方法包括
- 调用函数以在新的行(例如在“;”或“}”之后)进行写入
print('I am human, I am.');
- 调用函数以在控件内部的新的行进行写入
if ($a == 72) {
print('I am human, I am.');
}
- 将函数的返回值分配给一个变量 "$var = function()"
$result = sum ($a, 5);
- 在控件(表达式)的参数括号内调用函数
while ($i < count($one)) {
}
在我们之前的例子中,我们调用了几个函数。最常见的是我们调用了函数print()以将文本打印到输出。echo 的参数是我们想要打印的字符串(例如print("Hello World!")将“Hello World!”打印到输出)。
如果函数返回了一些信息,我们将它用简单的赋值运算符分配给一个变量 "=":
$var1 = func_name();
参数是在函数内部存在的变量。它们是在调用函数时由程序员提供的,函数可以在本地读取和更改它们(除了全局更改的引用类型变量,这是一个更高级的主题)。
当声明或调用具有多个参数的函数时,您需要用逗号“,”将不同的参数隔开。,'.
函数声明可能如下所示
function print_two_strings($var1, $var2) {
echo $var1;
echo "\n";
echo $var2;
return NULL;
}
要调用此函数,您必须给参数一个值。值是什么并不重要,只要有一个值即可
print_two_strings("Hello", "World");
输出
Hello World
在声明函数时,有时您可能想要自由地不使用所有参数。因此,PHP 允许您在声明函数时为它们指定默认值
function print_two_strings($var1 = "Hello World", $var2 = "I'm Learning PHP") {
echo($var1);
echo("\n");
echo($var2);
}
这些值只会在函数调用没有包含足够参数时使用。如果只提供了一个参数,那么$var2 = "I'm Learning PHP":
print_two_strings("Hello");
输出
Hello I'm Learning PHP
使用 PHP 的内置函数来获得动态数量参数的另一种方法是func_num_args, func_get_args,以及func_get_arg函数。
function mean() {
$sum = 0;
$param_count = func_num_args();
for ($i = 0; $i < $param_count; $i++) {
$sum += func_get_arg($i);
}
$mean = $sum/$param_count;
echo "Mean: {$mean}";
return NULL;
}
或
function mean() {
$sum = 0;
$vars = func_get_args();
for ($i = 0; $i < count($vars); $i++) {
$sum += $vars[$i];
}
$mean = $sum/count($vars);
echo "Mean: {$mean}";
return NULL;
}
上述函数将计算传递给它们的所有值的算术平均值并输出。区别在于第一个函数使用func_num_args和func_get_arg,而第二个函数使用func_get_args将参数加载到数组中。它们的输出将相同。例如
mean(35, 43, 3);
输出
Mean: 27
这个函数很好,但通常您希望您的函数返回一些信息。通常,程序员希望从函数中获取信息的原因有两个:
- 函数执行任务,例如计算,我们需要结果。
- 函数可以返回值来指示函数是否遇到任何错误。
要从函数中返回值,请使用return()语句在函数中。
function add_numbers($var1 = 0, $var2 = 0, $var3 = 0) {
$var4 = $var1 + $var2 + $var3;
return $var4;
}
示例 PHP 脚本
function add_numbers($var1 = 0, $var2 = 0, $var3 = 0) {
$var4 = $var1 + $var2 + $var3;
return $var4;
}
$sum = add_numbers(1, 6, 9);
echo "The result of 1 + 6 + 9 is {$sum}";
结果
The result of 1 + 6 + 9 is 16
注意return()语句将结束函数的执行。如果在return()语句之后在函数声明中出现了任何内容,它将被解析但不会被执行。这在某些情况下可能非常有用。例如
function divide ($dividee, $divider) {
if ($divider == 0) {
// Can't divide by 0.
return false;
}
$result = $dividee/$divider;
return $result;
}
注意,没有else在if之后。这是因为如果$divider等于0,则return()语句将被执行,函数将停止。
如果要返回多个变量,则需要返回数组而不是单个变量。例如
function maths ($input1, $input2) {
$total = ($input1 + $input2);
$difference = ($input1 - $input2);
$return = array("tot" => $total, "diff" => $difference);
return $return;
}
从您的脚本中调用它时,您需要将其调用到一个数组中。例如
$return = maths(10, 5);
在这种情况下$return['tot']将是总数(例如 15),而$return['diff']将是差值(5)。
开发人员可以在 PHP 脚本中创建函数,而无需使用function name($param...) {}语法。这可以通过编程来实现,编程可以让你动态运行函数。
有两种方法可以做到:要么使用直接调用,要么使用call_user_func或者call_user_func_array:
call_user_func和call_user_func_array唯一的区别在于call_user_func_array允许你使用第二个参数作为数组,以便轻松地传递数据,而call_user_func具有无限数量的参数,这在专业环境中并不实用。在这些例子中,类将用于更广泛的例子使用范围
class Some_Class {
function my_function($text1, $text2, $text3) {
$return = $text1 . "\n\n" . $text2 . "\n\n" . $text3;
return $return;
}
}
$my_class = new Some_Class();
使用call_user_func:
$one = "One";
$two = "Two";
$three = "Three";
$callback_func = array(&$my_class, "my_function");
$result = call_user_func($callback_func, $one, $two, $three);
echo $result;
使用call_user_func_array:
$one = "One";
$two = "Two";
$three = "Three";
$callback_func = array(&$my_class, "my_function");
$result = call_user_func_array($callback_func, array($one, $two, $three));
echo $result;
注意call_user_func和call_user_func_array是如何在两个例子中使用的。call_user_func_array允许脚本更动态地执行函数。
由于没有使用这两个函数进行非类函数的示例,因此这里给出:
使用call_user_func:
$one = "One";
$two = "Two";
$three = "Three";
$callback_func = "my_function";
$result = call_user_func($callback_func, $one, $two, $three);
echo $result;
使用call_user_func_array:
$one = "One";
$two = "Two";
$three = "Three";
$callback_func = "my_function";
$result = call_user_func_array($callback_func, array($one, $two, $three));
echo $result;
$my_func($param1, $param2);
$my_class_name = new ClassObject();
$my_class_name->$my_func_from_that_class($param1, $param2);
// The -> symbol is a minus sign follow by a "larger than" sign. It allows you to
// use a function that is defined in a different PHP class. It comes directly from
// object-oriented programming. Via a constructor, a function of that class is
// executable. This specific example is a function that returns no values.
call_user_func($my_func, $param1, $param2);
call_user_func(array(&${$my_class_name}, $my_func), $param1, $param2);
// Prefixing a & to a variable that represents a class object allows you to send the
// class object as a reference instead of a copy of the object. In this example this
// means that $my_class_name Object would have a copy made of it, the function will
// act on the copy, and when the function ends. The original object wouldn't suffer
// modifications. Passing an object through its reference passes the address in memory
// where that object is stored and call_user_func will alter the actual object.
call_user_func_array($my_func, array($param1, $param2));
// Most powerful, dynamic example
call_user_func_array(array(&${$my_class_name}, $my_func), array($param1, $param2));
function positif($x + $y;) {
$x = 2;
$y = 5;
$z = $x + $y;
echo $z;
}
positif = $x + $y;
创建运行时函数是使脚本更动态的一种非常好的方法
$function_name = create_function('$one, $two', 'return $one + $two;');
echo $function_name . "\n\n";
echo $function_name("1.5", "2");
create_function使用参数创建函数$one和$two,使用代码来计算返回值…… 当create_function被执行时,它将函数信息存储在内存中,并返回函数的名称。这意味着你无法自定义函数的名称,虽然这可能是大多数开发人员的偏好。