假設我有沿着這些路線的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