假设我有沿着这些路线的PHP文件:访问的变量和方法
<?php
function abc() { }
$foo = 'bar';
class SomeClass { }
?>
有什么特别的我必须做的使用abc()
和$foo
内SomeClass
?我正在考虑在函数中使用global
来访问函数外部定义的变量。
(我是PHP中OOP的新手)
假设我有沿着这些路线的PHP文件:访问的变量和方法
<?php
function abc() { }
$foo = 'bar';
class SomeClass { }
?>
有什么特别的我必须做的使用abc()
和$foo
内SomeClass
?我正在考虑在函数中使用global
来访问函数外部定义的变量。
(我是PHP中OOP的新手)
函数在全局级定义;所以,你不需要做任何事情来从你的班级的方法中使用它们。
有关详细信息,请参阅function page in the manual,其中规定(引用):
在PHP中的所有函数和类具有 全球范围 - 他们可以被称为 即使他们 定义的函数外内部,反之亦然。
为了您$foo
变量,在另一方面,你必须使用要访问它的每个方法/函数内global
关键字。
欲了解更多信息,请不要犹豫,阅读网页约Variable scope,评论之后,应该给你带来有趣的信息;-)
编辑:
每个方法/函数不管 被定义在一个类中吗?
如果一个“功能”一类中定义的,它不叫“功能”了,即使它仍然是使用的function
:它被称为“方法”
方法可以用于静态:
MyClass::myMethod();
或动态:
$obj = new MyClass();
$obj->myMethod();
取决于他们是否被定义如static或不。作为一个注释:如果你是PHP新手,你应该花一些时间阅读手册的Classes and Objects (PHP 5)部分:它会解释很多。
任何类以外的函数都是全局的,可以从任何地方调用。与变量相同..只记得使用全局变量...
e。摹
<?php
function abc() { }
$foo = 'bar';
class SomeClass {
public function tada(){
global $foo;
abc();
echo 'foo and '.$foo;
}
}
?>
请勿使用'global'!你应该避免它!为什么在下面寻找我的答案。 – brzuchal 2016-08-18 08:58:29
尝试创建调用$ foo的一个新的类,并设置像
class SomeClass {
public function tada(){
$foo = new Class;
$foo = $foo->getFoo;
}
}
两个函数和变量甘蔗变量调用的类中,如果
<?php
function abc() {
$ba = 'Hello';
return $ba;
}
$bar = 'World';
class foo {
public function __construct() {
global $bar;
$body = abc();
$bod = $bar;
echo $body.$bod;
}
}
$foo = new foo();
$foo;
请勿使用'global'!你应该避免它!为什么在下面寻找我的答案。 – brzuchal 2016-08-18 09:04:14
<?php
class Foo {
public static $my_static = 'foo';
public function staticValue()
{
return self::$my_static;
}
}
print Foo::$my_static."\n";//Accessing variables outside of class definitions
$foo = new Foo();
print $foo->staticValue()."\n";
?>
之前调用
只需通过构造函数将变量传递给对象实例,或者在需要时将其传递给方法,并记住DON '使用全球!任何地方!
为什么要避免global
?
针对全局变量的观点是它们耦合的代码非常紧密。您的整个代码库依赖于a)变量名称$ config和b)该变量的存在。如果你想重命名这个变量(无论出于什么原因),你必须在你的代码库中的任何地方这样做。你也可以不再使用任何独立于变量的代码片段。 https://stackoverflow.com/a/12446305/1238574
您可以在任何地方使用abc()
,因为在PHP函数中可以全局访问。
<?php
function abc() { }
$foo = 'bar';
class SomeClass {
private $foo;
public function __construct($foo) {
$this->foo = $foo;
}
public function doSomething() {
abc($this->foo);
}
}
class OtherClass {
public function doSomethingWithFoo($foo) {
abc($foo);
}
}
$obj = new SomeClass($foo); // voillea
// or
$obj2 = new OtherClass();
$obj2->doSomethingWithFoo($foo);
每个方法/函数,无论它是在一个类中定义或不是? – 2009-09-12 17:02:13
@Shadow:我编辑了我的答案以提供更多信息 - 希望这有助于! – 2009-09-12 17:06:45