0

我知道下面的 PHP 代码是不正确的,但我想知道如何实现这个想法。

function A(){
    $a = 'Hello';
    $b = 'World';
    $c = $a.' '.$b;
    echo 'blah blah blah times 1,000';

    function B($c){
        return $c;
    }
}
echo function B();
4

3 回答 3

3

有几种方法。这是最简单的:

function B($c){
    return $c;
}

function A(){
    $a = 'Hello';
    $b = 'World';
    $c = $a.' '.$b;
    echo 'blah blah blah times 1,000';
    B($c);
}

}
echo B();

但鉴于这B无济于事,您可以选择:

function A(){
    $a = 'Hello';
    $b = 'World';
    $c = $a.' '.$b;
    echo 'blah blah blah times 1,000';
    return $c;
}

echo A();

我怀疑您想在函数之间交换值以获得更大的输出。为此,您应该研究面向对象的编程,PHP 正在尽力追赶。

面向对象的方法:

Class ChatterBox {

   public function sayHello() {
        $a = 'Hello';
        $b = 'World';
        $c = $a.' '.$b;        
        return $c 
    }

    public function rambleOn() {

       echo 'blah blah blah times 1,000';

     }

}

$small_talk = new ChatterBox();

echo $small_talk -> sayHello(); // Hello World!

$small_talk -> rambleOn() // 'blah blah blah times 1,000';

您获得的好处不仅是拥有一个具有多个函数(方法)的变量,而且在一个对类全局的方法中设置一个值可以被其他方法访问,因此假设您想始终包含您的姓名,您可以再进一步:

Class ChatterBox {

  function __construct($name) {
        $this -> name = (!empty($name)) ? $name : 'Mysterion';
  }

   public function set_intro() {

        $this -> intro = "My name is " . $this ->name . ".";

    }

   public function sayHello() {
        $a = 'Hello';
        $b = 'World';
        $c = $a.' '.$b;
        return $c . $this -> set_intro();
    }

    public function rambleOn() {

       echo $this -> intro . 'blah blah blah times 1,000';

     }

}

$small_talk = new ChatterBox("Rick");

echo $small_talk -> sayHello(); // Hello World! My name is Rick.

$small_talk -> rambleOn() // 'My name is Rick. blah blah blah times 1,000';

当然,OOP 变得更加复杂(正如我之前所说,PHP 仍在迎头赶上),但作为初学者,我认为将所有函数捆绑在一起并能够共享变量等是很整洁的。也许是 lambda 函数是事情的发展方式,但由于我仍然掌握 OOP 的窍门,我认为最好同时涉足这两种情况,而不是选择哪一个是“最好的”。特别是因为在您的示例中,lambda(匿名)函数(对我来说)为什么一个函数位于另一个函数内部并没有真正意义。在 OOP 中,这是有道理的,因为您可能有不同的选项/选择/等要根据上下文调用,同时又不想丢失对象中的数据或必须在函数之间来回传递值当它们将在整个对象中使用时。

于 2012-05-26T23:35:27.610 回答
2

如果你有 PHP 5.3 或更高版本,使用匿名函数很容易:

function A() {
    global $B;

    $a = 'Hello';
    $b = 'World';
    $c = $a.' '.$b;
    echo 'blah blah blah times 1,000';

    $B = function() use ($c) {
        return $c;
    };
}

A(); // blah blah blah times 1,000
echo $B(); // Hello World

如果没有,您可以使用create_function.

于 2012-05-26T23:29:45.037 回答
0

您的脚本的工作方式,默认情况下未定义 B。当您调用函数 A 时,B 将被定义为脚本的其余部分。例如:

echo B('blah'); // Returns a 'function doesn't exist' error

A();
echo B('blah'); //Echos 'blah', as B is now defined.
于 2012-05-26T23:32:59.747 回答