Intereting Posts

Доступ к переменным и методам вне определений классов

Предположим, у меня есть php-файл по этим строкам:

<?php function abc() { } $foo = 'bar'; class SomeClass { } ?> 

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

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

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

например

 <?php function abc() { } $foo = 'bar'; class SomeClass { public function tada(){ global $foo; abc(); echo 'foo and '.$foo; } } ?> 

Просто передайте переменную в экземпляр объекта через конструктор или передайте его методу, когда это необходимо, и не забудьте НЕ ИСПОЛЬЗОВАТЬ ГЛОБАЛЬНЫЙ! В ЛЮБОМ МЕСТЕ!

Почему нужно избегать 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); 

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

Для получения дополнительной информации см. Страницу функций в руководстве , в которой указано (цитирование):

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

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

Для получения дополнительной информации, не стесняйтесь читать страницу о области Variable , которая должна предоставить вам интересные сведения 😉

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

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

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

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

 MyClass::myMethod(); 

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

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

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

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

Как функциональные, так и переменные cane вызывать внутри классов, если они вызываются до

 <?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; 

Попробуйте создать новый класс, который вызывает $ foo и задает переменную типа

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