当前位置:首页 > CN2资讯 > 正文内容

php函数php implode函数

14小时前CN2资讯


用户自定义函数
函数的参数
返回值
可变函数
内部函数
匿名函数

用户自定义函数

定义
一个函数可由以下的语法来定义:

<?php
function foo($arg1, ..., $argn)
{
//do something
return $retval;
}

命名规范
函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。

函数无需在调用之前被定义

<?php

function actionA()
{
echo "A";
}

actionA();//可以调用
actionB();//可以调用

function actionB()
{
echo "B";
}

除非函数是有条件被定义或者在函数中调用函数,一般都无须在调用函数之前定义。

函数中调用函数

<?php

function actionA()
{
function actionB()
{
echo "B";
}
}
actionB();//无法调用
actionA();//定义函数 actionB()
actionB();//可以调用

PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数。

<?php

function sayHi()
{
echo 'Hi';
}
function sayHi()
{
echo 'Hello';
}
sayHi();//报错,不能重定义函数 sayHi()

函数名是大小写无关的,不过在调用函数的时候,通常使用其在定义时相同的形式。

递归函数
递归函数的本质是函数调用函数本身,但是要避免递归函数/方法,调用超过 100-200 层,因为可能会使堆栈崩溃从而使当前脚本终止。 无限递归可视为编程错误。

<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}

函数的参数

通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。

PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数。也支持可变数量的参数;

通过引用传递参数
缺省情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。 如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面预先加上符号 &:

<?php
function actionB(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
actionB($str);
echo $str; // outputs 'This is a string, and something extra.'
?>

默认参数的值
函数可以定义 C++ 风格的标量参数默认值,如下:

<?php
function makecoffee($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>

以上例程会输出:

Making a cup of cappuccino.
Making a cup of .
Making a cup of espresso.

返回值

值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。
return

<?php
function square($num)
{
return $num * $num;
}
echo square(4); // outputs '16'.

函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。

返回一个数组以得到多个返回值

<?php
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();

从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 & :

从函数返回一个引用

<?php
function &returns_reference()
{
return $someref;
}

$newref =& returns_reference();
?>

返回值类型声明
PHP 7 增加了对返回类型声明的支持。 类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。

<?php

function arraysSum(array ...$arrays): array
{
return array_map(function(array $array): int {
return array_sum($array);
}, $arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

以上例程会输出:

Array
(
[0] => 6
[1] => 15
[2] => 24
)

可变函数

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

变量函数不能用于语言结构,例如 echo, print, unset(), isset(), empty(), include, require 以及类似的语句。需要使用自己的包装函数来将这些结构用作变量函数。

编辑 /home/project/variable.php

<?php

class Test
{
public static $actionB = "property B";

public function actionA()
{
echo "method A";
}
public static function actionB()
{
echo "method B";
}
}

function sayHi() {
echo "Hi".PHP_EOL;
}

function sayHello($word = '') {
echo "Hello $word";
}


$func = 'sayHi';
$func();

$func = 'sayHello';
$func('World');

$func = 'actionA';
(new Test())->$func();

echo Test::$actionB;
$actionB = 'actionB';
Test::$actionB();

执行

php variable.php

从结果可以看出

  • 可以用可变函数的语法来调用一个对象方法和静态方法。
  • 静态方法调用优先级高于属性调用

内部函数

也称为内置函数,PHP 有很多标准的函数和结构。还有一些函数需要和特定地 PHP 扩展模块一起编译,否则在使用它们的时候就会得到一个致命的未定义函数错误。

例如,要使用 image 函数中的 imagecreatetruecolor(),需要在编译 PHP 的时候加上 GD 的支持。或者,要使用 mysql_connect() 函数,就需要在编译 PHP 的时候加上 MySQL 支持。

调用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。PHP 手册按照不同的扩展库组织了它们的文档。

Note: 如果传递给函数的参数类型与实际的类型不一致,例如将一个 array 传递给一个 string 类型的变量,那么函数的返回值是不确定的。在这种情况下,通常函数会返回 NULL。但这仅仅是一个惯例,并不一定如此。

参见 function_exists(),函数参考,get_extension_funcs() 和 dl()。

匿名函数

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

匿名函数目前是通过 Closure 类来实现的。

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
return strtoupper($match[1]);
}, 'hello-world');
// 输出 helloWorld

闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:

匿名函数变量赋值

<?php
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');

从父作用域继承变量
闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。

编辑 /home/project/anonymous.php

<?php
$msg = 'hello';

$a = function () {
var_dump($msg);
};
$a();

$b = function () use ($msg) {
var_dump($msg);
};
$b();

$msg = 'hi';
$b();

$c = function () use (&$msg) {
var_dump($msg);
};
$c();

$d = function ($arg) use ($msg) {
var_dump($arg . ' ' . $msg);
};
$d("hello");

执行

php anonymous.php

从结果可以看出

使用 use 可以从父作用域继承变量
匿名函数是在定义的时候继承父作用域变量,而不是在调用的时候继承
变量使用引用赋值,则原变量发生改变,则引用该变量的变量也会发生变化


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/26075.html

    分享给朋友:

    “php函数php implode函数” 的相关文章

    CentOS 7 如何有效限制服务器带宽

    在CentOS 7系统中,限制服务器带宽不仅关乎到网络性能,更影响到资源的公平利用。网络资源共享在现在的许多应用中显得尤为重要。一旦带宽没有得到合理控制,某些用户或应用可能会消耗过多的网络,导致其他用户受到影响。因此,我深信带宽限制成为了一种有效的网络管理方法。 举个简单的例子,想象一下在公司内网中...

    微信海外服务器助力全球化业务拓展与用户体验优化

    微信海外服务器是微信在全球范围内部署的技术基础设施,旨在支持其海外业务的发展。这些服务器不仅是数据存储的中心,还承担着用户信息处理和互动的各种功能。随着技术的不断进步,微信的使用需求也在全球范围内快速增长,这种现象驱动着微信不断扩展其海外服务器的网络。 我们时常看到,微信与WeChat的分拆让用户数...

    cping工具:高效的网络检测助手

    在网络管理的世界里,cping工具无疑是一个非常实用的助手。作为一款高效且用户友好的网络检测工具,它专注于对C类IP地址进行ICMP测试。这不仅使得网络管理员能够快速了解网络环境的状态,还能有效帮助他们解决潜在的问题。 我总是喜欢用cping工具来进行网络监测。它的界面整洁,让我一目了然。重要的是,...

    eno VPS:掌握网络接口命名规则与性能优化技巧

    在了解eno VPS之前,我们先来看看什么是eno命名规则。ena作为一种网络接口命名方式,通过特定的规则来表示Linux系统中的网络设备。这种规则帮助用户更容易地识别和管理各种网络接口。具体来说,eno采用的是eno[n|d]的格式,主要用于板载设备。而对于热插拔设备,则使用ens[f][n|d]...

    远程VPS优选指南:高效管理虚拟专用服务器的最佳实践

    随着远程工作的普及和数字化转型的加速,远程VPS(虚拟专用服务器)逐渐成为许多企业和个人的首选工具。VPS通过虚拟化技术,让我们能够在一台物理服务器上同时运行多个独立的操作系统,这种灵活性使得用户能够像管理独立服务器那样,远程登录和管理自己的虚拟环境。每天都有更多的人意识到,拥有一个VPS可以为他们...

    如何选择低价域名注册商及推荐后缀

    在如今的互联网时代,拥有一个独特而便宜的域名变得尤为重要。无论你是想开始一个新项目、建立个人博客,还是开设在线商店,低价域名都能为你节省一笔不小的预算。接下来,我会盘点一些国外和国内的低价域名注册商,帮助你做出明智的选择。 一、国外便宜域名注册商概览 GoDaddy 我个人对GoDaddy的印象非...