Доступ к переменным и методам вне определений классов
Предположим, что у меня есть файл php по этим строкам:
<?php
function abc() { }
$foo = 'bar';
class SomeClass { }
?>
Есть ли что-то особенное, что мне нужно сделать, чтобы использовать abc()
и $foo
внутри SomeClass
? Я думаю по линиям использования global
в функции для доступа к переменным, определенным вне функции.
(Я новичок в ООП в PHP)
Ответы
Ответ 1
Функции вне любого класса являются глобальными и могут быть вызваны из любого места. То же самое с переменными.. просто не забудьте использовать глобальные переменные...
например
<?php
function abc() { }
$foo = 'bar';
class SomeClass {
public function tada(){
global $foo;
abc();
echo 'foo and '.$foo;
}
}
?>
Ответ 2
Просто передайте переменную в экземпляр объекта через конструктор или передайте его методу, когда это необходимо, и не забудьте НЕ ИСПОЛЬЗОВАТЬ ГЛОБАЛЬНЫЙ! ВЕЗДЕ!
Почему global
следует избегать?
Точка против глобальных переменных заключается в том, что они очень сильно сочетают код. Вся ваша база кода зависит от: a) имени переменной $config и b) существования этой переменной. Если вы хотите переименовать переменную (по какой-либо причине), вы должны делать это везде на всей вашей кодовой базе. Вы также не можете использовать какой-либо фрагмент кода, который зависит от переменной независимо от нее. fooobar.com/questions/136265/...
Вы можете использовать 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);
Ответ 3
Функции определены на глобальном уровне; поэтому вам не нужно ничего делать, чтобы использовать их из метода вашего класса.
Для получения дополнительной информации см. страницу функций в руководстве, в которой указано (цитирование):
Все функции и классы в PHP имеют глобальный масштаб - их можно назвать вне функции, даже если они были определяется внутри и наоборот.
С другой стороны, для вашей переменной $foo
вам необходимо использовать global
ключевое слово внутри каждого метода/функции, в котором вы хотите для доступа к ней.
Для получения дополнительной информации, не стесняйтесь читать страницу Переменная область, которая должна предоставить вам интересные сведения; -)
Редактировать после комментария:
Каждый метод/функция независимо от него определяется в классе или нет?
Если в классе определена "функция", она больше не называется "функцией", даже если она все еще используется function
: она называется "методом"
Способы могут использоваться статически:
MyClass::myMethod();
Или динамически:
$obj = new MyClass();
$obj->myMethod();
В зависимости от того, были ли они определены как static или нет.
В качестве побочного элемента: если вы новичок в ООП в PHP, вы должны определенно потратить некоторое время на чтение Classes and Objects (PHP 5) руководства: он многое объяснит.
Ответ 4
Как функциональные, так и переменные 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;
Ответ 5
Попробуйте создать новый класс, который вызывает $foo и задает переменную типа
class SomeClass {
public function tada(){
$foo = new Class;
$foo = $foo->getFoo;
}
}
Ответ 6
<?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";
?>