Предположим, у меня есть 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"; ?>