我知道以下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();
答案 0 :(得分: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中,有意义的是你可能根据上下文有不同的选项/选择/等,而不想丢失对象中的数据或者必须在函数之间传递值何时将它们用于整个物体。
答案 1 :(得分: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
完成同样的事情。
答案 2 :(得分:0)
您的脚本的工作方式,默认情况下B未定义。当您调用函数A时,B将被定义为脚本的其余部分。 EG:
echo B('blah'); // Returns a 'function doesn't exist' error
A();
echo B('blah'); //Echos 'blah', as B is now defined.