一尘不染

什么是PHP嵌套函数?

php

在JavaScript中,嵌套函数非常有用:闭包,私有方法以及您拥有的东西。

什么是嵌套PHP函数?有人使用它们吗?

这是我做的小调查

<?php
function outer( $msg ) {
    function inner( $msg ) {
        echo 'inner: '.$msg.' ';
    }
    echo 'outer: '.$msg.' ';
    inner( $msg );
}

inner( 'test1' );  // Fatal error:  Call to undefined function inner()
outer( 'test2' );  // outer: test2 inner: test2
inner( 'test3' );  // inner: test3
outer( 'test4' );  // Fatal error:  Cannot redeclare inner()

阅读 467

收藏
2020-05-26

共1个答案

一尘不染

基本上没有,我一直将其视为解析器的副作用。

伊兰·加珀林(Eran
Galperin)误认为这些功能是某种私有的,只是outer()在运行之前才声明它们。它们也不是私有范围的,尽管确实延迟了,但它们确实污染了全球范围。作为回调,外部回调仍然只能被调用一次。我仍然看不到将其应用于很可能多次调用别名的数组有什么帮助。

唯一的“现实世界”的例子,我能挖出个是这个只能运行一次,并且可以IMO改写清洁。

我唯一能想到的是让模块调用[name] _include方法,该方法在全局空间中设置多个嵌套方法,并与

if (!function_exists ('somefunc')) {
  function somefunc() { }
}

检查。

PHP的OOP显然是一个更好的选择:)

2020-05-26