global关键字的效用是什么?
是否有任何理由更喜欢一种方法?
方法1:
function exempleConcat($str1, $str2)
{
return $str1.$str2;
}
Run Code Online (Sandbox Code Playgroud)
方法2:
function exempleConcat()
{
global $str1, $str2;
return $str1.$str2;
}
Run Code Online (Sandbox Code Playgroud)
什么时候使用有意义global?
对我来说,它似乎很危险 ......但它可能只是缺乏知识.我感兴趣的是记录(例如代码示例,文档链接......)技术原因.
提前致谢!
这是关于这个主题的一个很好的一般性问题,我(@Gordon)正在提供奖励以获得更多答案.无论您的答案是否与我的答案一致或给出不同的观点都无关紧要.由于该global主题时不时出现,我们可以使用一个很好的"规范"答案来链接.
这(我的代码的简化版)不起作用:
<?php
$sxml = new SimpleXMLElement('<somexml/>');
function foo(){
$child = $sxml->addChild('child');
}
foo();
?>
Run Code Online (Sandbox Code Playgroud)
为什么?我想访问,$sxml因为我想在foo()失败时记录错误. foo()递归调用自己来创建一个目录列表,所以我担心将整体传递给$sxml自己(如同foo($sxml))可能会损害性能.
有没有办法进入$sxml内部$foo而不将其作为参数传递?(PHP 5.2.x +)
编辑:如果代码看起来像这样,实际上怎么办?
<?php
bar(){
$sxml = new SimpleXMLElement('<somexml/>');
function foo(){
$child = $sxml->addChild('child');
}
foo();
}
bar();
?>
Run Code Online (Sandbox Code Playgroud) 我有以下(剥离)代码:
<?PHP
class A {
function Show(){
echo "ciao";
}
}
$a = new A();
$b = new B();
class B {
function __construct() {
$a->Show();
}
}
?>
Run Code Online (Sandbox Code Playgroud)
有点意外,我无法从类中访问全局定义的$ a变量,我得到一个未定义的变量异常.有帮助吗?