2009-09-12 79 views
10

假设我有沿着这些路线的PHP文件:访问的变量和方法

<?php 
function abc() { } 

$foo = 'bar'; 

class SomeClass { } 
?> 

有什么特别的我必须做的使用abc()$fooSomeClass?我正在考虑在函数中使用global来访问函数外部定义的变量。

(我是PHP中OOP的新手)

回答

1

函数在全局级定义;所以,你不需要做任何事情来从你的班级的方法中使用它们。

有关详细信息,请参阅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)部分:它会解释很多。

+0

每个方法/函数,无论它是在一个类中定义或不是? – 2009-09-12 17:02:13

+0

@Shadow:我编辑了我的答案以提供更多信息 - 希望这有助于! – 2009-09-12 17:06:45

24

任何类以外的函数都是全局的,可以从任何地方调用。与变量相同..只记得使用全局变量...

e。摹

<?php 
function abc() { } 

$foo = 'bar'; 

class SomeClass { 
public function tada(){ 
    global $foo; 

    abc(); 
    echo 'foo and '.$foo; 
} 
} 
?> 
+4

请勿使用'global'!你应该避免它!为什么在下面寻找我的答案。 – brzuchal 2016-08-18 08:58:29

-2

尝试创建调用$ foo的一个新的类,并设置像

class SomeClass { 
public function tada(){ 
    $foo = new Class; 
    $foo = $foo->getFoo; 
} 
} 
-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; 
+0

请勿使用'global'!你应该避免它!为什么在下面寻找我的答案。 – brzuchal 2016-08-18 09:04:14

-2
<?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"; 
    ?>  
之前调用
8

只需通过构造函数将变量传递给对象实例,或者在需要时将其传递给方法,并记住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);