PHP自定义函数作用域/好实践


PHP custom function scope / good practice

我有一个脚本,它有以下结构:

<?php
    if( a == b ){
        function some_function_name(){
            // do something here
        }
        if( c == d ){
            some_function_name();
        }
    }
?>

我得到一个错误消息说some_function_name();不存在

我做错了什么,这是好的做法吗?

我想创建一个函数,因为我有一堆需要多次使用的步骤,我不希望一遍又一遍地复制/粘贴相同的代码。

不能在if语句中声明函数

你可以这样做:

<?php   
    function some_function_name() {
       // do something here
    }
    if( a == b  && c == d ) {
        some_function_name();
    }
?>

我会避免在条件if()语句中定义函数。首先在文件的顶部定义函数,并在必要时调用它。

如果你想把一堆步骤放入函数中,你必须在If语句之外定义函数,最好是在文件的开头或结尾,或者在单独的文件

如果这个函数是你的工作流的一个合法的部分,将在多个地方使用,使它成为一个顶级函数(或者一个类方法,如果适用的话)。

在(相对不常见的)情况下,您希望创建一个函数作为回调传递,并且该函数的行为主要由变量的值决定,您可以定义一个匿名函数:

$func = function() {
    // do something here
}
if(c == d){
    // you can call it like this, but read the above paragraph
    $func();
}

匿名函数要求PHP>= 5.3;如果您使用的是较早的版本,那么您可以使用create_function实现相同的结果,但是它太麻烦了,因此很少值得麻烦。

这不是一个好的做法,事实上,没有理由不在if块之外定义函数。这种方法很容易出错。

你得到错误,因为some_function_name()绑定到第一个if块的范围。

我想创建一个函数,因为我有一堆需要多次使用的步骤,我不想一遍又一遍地复制/粘贴相同的代码。

你不应该复制/粘贴!这就是函数的作用。创建您的函数并尽可能多地重用它们。