假设我有以下几行的php文件:
<?php
function abc() { }
$foo = 'bar';
class SomeClass { }
?>
在abc()
内使用$foo
和SomeClass
时,我需要做些什么吗?我正在考虑在函数中使用global
来访问函数外部定义的变量。
(我是PHP的OOP新手)
答案 0 :(得分:27)
任何类外的函数都是全局的,可以从任何地方调用。与变量相同..只记得使用全局变量......
e.g
<?php
function abc() { }
$foo = 'bar';
class SomeClass {
public function tada(){
global $foo;
abc();
echo 'foo and '.$foo;
}
}
?>
答案 1 :(得分:11)
只需通过构造函数将变量传递给对象实例,或者在需要时将其传递给方法,并记住不要使用全局! ANYWHERE!
为什么要避免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);
答案 2 :(得分:2)
功能在全球范围内定义;所以,你不需要做任何事情来从你的班级方法中使用它们。
有关更多信息,请参阅function page in the manual,其中说明(引用):
PHP中的所有函数和类都有 全球范围 - 可以调用它们 在功能之外,即使它们是 内部定义,反之亦然。
另一方面,对于$foo
变量,您必须在要访问它的每个方法/函数中使用global
关键字。
有关更多信息,请不要犹豫,阅读有关Variable scope的页面,该页面应为您提供有趣的信息; - )
评论后编辑:
每种方法/功能无论如何 是否在课堂上定义?
如果在一个类中定义了“函数”,它就不再被称为“函数”,即使它仍然是使用的function
:它被称为“方法”
方法可以静态使用:
MyClass::myMethod();
或动态:
$obj = new MyClass();
$obj->myMethod();
取决于它们是否定义为static。
作为旁注:如果您不熟悉PHP中的OOP,那么您应该花一些时间阅读本手册的Classes and Objects (PHP 5)部分:它将解释得很多。
答案 3 :(得分:-1)
如果在
之前调用,则函数和变量都可以在类内部调用<?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;
答案 4 :(得分:-1)
<?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";
?>
答案 5 :(得分:-2)
尝试创建一个调用$ foo并设置类似
的变量的新类class SomeClass {
public function tada(){
$foo = new Class;
$foo = $foo->getFoo;
}
}