2009-09-12 107 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);