2009-09-12 2 views
10

Предположим, у меня есть PHP файл вдоль этих линий:Доступ к переменным и методы вне определения класса

<?php 
function abc() { } 

$foo = 'bar'; 

class SomeClass { } 
?> 

Есть ли что-нибудь особенное, я должен сделать, чтобы использовать abc() и $foo внутри SomeClass? Я думаю по линиям использования global в функции доступа к переменным, определенным вне функции.

(Я новичок в ООП в PHP)

ответ

1

функции определены на глобальном уровне; поэтому вам не нужно ничего делать, чтобы использовать их из метода вашего класса.

Для получения дополнительной информации см function page in the manual, в котором говорится (цитирую):

Все функции и классы в PHP имеют глобальный масштаб - их можно назвать вне функции, даже если они были определенной внутри и наоборот.


Для вашего $foo переменных, с другой стороны, вы должны использовать ключевое слово global внутри каждый метод/функцию, в которой вы хотите получить к нему доступ.

Для получения дополнительной информации, не стесняйтесь читать страницу о Variable scope, которая должна принести интересные вам INFORMATIONS ;-)


Редактировать после комментария:

Каждый метод/функция независимо из него определяется в классе или нет?

Если «функция» определяется внутри класса, это не называется «функция» больше, даже если он по-прежнему function, который используется: это называется «метод»

методы могут использовать статически:

MyClass::myMethod(); 

Или Динамически:

$obj = new MyClass(); 
$obj->myMethod(); 

в зависимости от того, были ли они определены как static или нет.


Как заметка на полях: если вы новичок в ООП в PHP, вы должны определенно потратить некоторое время, чтобы прочитать Classes and Objects (PHP 5) раздел руководства: он многое объясняет.

+0

Каждый метод/функция независимо от того, что она определена внутри класса или нет? –

+0

@Shadow: Я отредактировал свой ответ, чтобы предоставить немного больше информации - надеюсь, что это поможет! –

24

Функции вне любого класса являются глобальными и могут быть вызваны из любого места. То же самое с переменными .. просто не забудьте использовать глобальные переменные ...

e.г

<?php 
function abc() { } 

$foo = 'bar'; 

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

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

Не используйте 'global'! Вы должны избегать этого! Посмотрите на мой ответ ниже, почему. – brzuchal

-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

-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); 
Смежные вопросы