Доступ к переменным и методам вне определений классов - PullRequest
13 голосов
/ 12 сентября 2009

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

<?php
function abc() {  }

$foo = 'bar';

class SomeClass {  }
?>

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

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

Ответы [ 6 ]

28 голосов
/ 13 сентября 2009

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

* 1003 например *

<?php
function abc() {  }

$foo = 'bar';

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

     abc();
     echo 'foo and '.$foo;
 }
}
?>
10 голосов
/ 18 августа 2016

Просто передайте вашу переменную экземпляру объекта через конструктор или передайте его методу, когда это необходимо, и помните, что НЕ ИСПОЛЬЗУЙТЕ GLOBAL! ВЕЗДЕ!

Почему global следует избегать?

Смысл глобальных переменных в том, что они очень тесно связывают код. Вся ваша кодовая база зависит от а) имени переменной $ config и б) существования этой переменной. Если вы хотите переименовать переменную (по какой-либо причине), вы должны делать это везде в вашей кодовой базе. Вы также больше не можете использовать какой-либо фрагмент кода, который зависит от переменной, независимо от нее. 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);
2 голосов
/ 12 сентября 2009

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

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

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


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

Для получения дополнительной информации, не стесняйтесь читать страницу о Переменная область , которая должна принести вам интересную информацию; -)


Изменить после комментария:

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

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

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

MyClass::myMethod();

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

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

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


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

0 голосов
/ 18 августа 2016
  <?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";
  ?>    
0 голосов
/ 12 июля 2013

Как функции, так и переменные можно вызывать внутри классов, если они вызывались раньше

<?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 голосов
/ 26 апреля 2013

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

class SomeClass {  
 public function tada(){
     $foo = new Class;
     $foo = $foo->getFoo;
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...