Инициализация переменных в стиле C в PHP - PullRequest
4 голосов
/ 17 ноября 2009

Есть ли в PHP такая вещь, как локальные, частные, статические и публичные переменные? Если да, можете ли вы привести примеры каждого из них и как их область действия демонстрируется внутри и вне класса и внутри функций?

Ответы [ 3 ]

5 голосов
/ 17 ноября 2009

Я не знаю о C ++, но вот как работает PHP:

Для функциональных областей:

<?php

  $b = 6;

  function testFunc($a){
    echo $a.'-'.$b;
  }

  function testFunc2($a){
    global $b;
    echo $a.'-'.$b;
  }

  testFunc(3);
  testFunc2(3);

?>

Выход

3-
3-6

Код внутри функций доступен только для переменных вне функций с использованием ключевого слова global. Смотри http://php.net/manual/en/language.variables.scope.php

Что касается классов:

<?php

class ExampleClass{

  private $private_var = 40;
  public $public_var = 20;
  public static $static_var = 50;

  private function classFuncOne(){
    echo $this->private_var.'-'.$this->public_var; // outputs class variables
  }

  public function classFuncTwo(){
    $this->classFuncOne();
    echo $private_var.'-'.$public_var; // outputs local variable, not class variable
  }

}

$myobj = new ExampleClass();

$myobj->classFuncTwo();
echo ExampleClass::$static_var;
$myobj->classFuncOne(); // fatal error occurs because method is private

?>

Вывод будет:

40-20
-
50
Неустранимая ошибка: вызов частного метода ExampleClass :: classFuncOne () из контекста '' в C: \ xampp \ htdocs \ scope.php в строке 22 * ​​1021 *

Одно замечание: PHP не имеет инициализации переменных, хотя говорят, что переменные установлены или не установлены. Когда переменная установлена, ей присваивается значение. Вы можете использовать unset, чтобы удалить переменную и ее значение. Неустановленная переменная эквивалентна false, и если вы используете ее со всеми выводами ошибок, вы увидите ошибку E_NOTICE.

4 голосов
/ 17 ноября 2009

В PHP есть статические, локальные, частные, публичные и защищенные класс переменные.

Однако в реализации PHP ООП все немного по-другому: руководство поможет вам:

Видимость свойства или метода может быть определен с помощью префикса декларация с ключевыми словами public, охраняемый или частный.

Кроме того, ознакомьтесь с статической документацией по ключевым словам .

Подробнее о нормальных переменных и их области действия вы сможете прочитать здесь: http://php.net/manual/en/language.variables.scope.php:

По большей части все переменные PHP имеют только одну область видимости.

Я надеюсь, что ссылки смогут объяснить вам это лучше, чем я; -)

1 голос
/ 17 ноября 2009

да, PHP 5 включает статические переменные и видимость в классе.

class MyClass
{
    public static $my_static = 'foo';
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    public function staticValue() {
       return self::$my_static;
    }
    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...