[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: static and self
ola_sh
Зачем нужно объявлять метод или свойство через static и как правильно пользоваться sеlf, никак не могу догнать.



Спустя 6 минут, 22 секунды (22.03.2011 - 13:01) sharki написал(а):
К статическим методам можно достучаться без создания экземпляра класса, т.е чтобы вызвать поле 'pole' из статического метода не надо писать

$a = new MyClass();
echo $a->pole;


А просто вызывается напрямую

echo MyClass::pole;


self:: используется для получения значения внутри класса т.е

class A {
static public $a = "значение";

static public function method () {
echo self::$a;
}
}


A::method();

Спустя 3 минуты, 33 секунды (22.03.2011 - 13:05) ola_sh написал(а):
Цитата (sharki @ 22.03.2011 - 10:01)
К статическим методам можно достучаться без создания экземпляра класса, т.е чтобы вызвать поле 'pole' из статического метода не надо писать

$a = new MyClass();
echo $a->pole;


А просто вызывается напрямую

echo MyClass::pole;


self:: используется для получения значения внутри класса т.е

class A {
static public $a = "значение";

static public function method () {
echo self::$a;
}
}


A::method();

Спасибо за ответ, ещё вопрос,почему не использовать $this?

Спустя 35 секунд (22.03.2011 - 13:05) sharki написал(а):
$this-> используется НЕ для статических методов и полей.

Спустя 1 минута, 16 секунд (22.03.2011 - 13:07) ola_sh написал(а):
Всё понял, спасибо smile.gif

Спустя 1 час, 50 минут, 7 секунд (22.03.2011 - 14:57) neadekvat написал(а):
Цитата (sharki @ 22.03.2011 - 13:05)
$this-> используется НЕ для статических методов и полей.

$this-> можно использовать и для статических методов и членов.
Смысл-то в другом - $this доступна только после создания объекта, а статические члены сделали как раз для того, чтобы к ним можно было обращаться без создания объекта, следовательно, $this будет просто недоступна.

Спустя 19 часов, 10 минут, 8 секунд (23.03.2011 - 10:07) linker написал(а):
Я не буду рассказывать, я покажу на примере
class MyClassA
{
public static $Prop = 'a';

public function MyFunc()
{
self::$Prop = 'b';
}

public function Show()
{
echo self::$Prop;
}
}


class MyClassB extends MyClassA
{
public static $Prop = 'a';
}

$A = new MyClassA();
$B = new MyClassB();
$B->MyFunc();
$A->Show(); // Вывод 'b'
$B->Show(); // Вывод 'b'
class MyClassA
{
public static $Prop = 'a';

public function MyFunc()
{
static::$Prop = 'b';
}

public function Show()
{
echo static::$Prop;
}
}


class MyClassB extends MyClassA
{
public static $Prop = 'a';
}

$A = new MyClassA();
$B = new MyClassB();
$B->MyFunc();
$A->Show(); // Вывод 'a'
$B->Show(); // Вывод 'b'


_____________
С Уважением ola_sh
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.