Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> статические и обычные члены классов пересекаются? 
:(
    Опции темы
MyDarkSide
Дата 19.10.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: нет
Всего: -1



Либо PHP 5.2.6 путает области видимости либо я чего-то не понял  
Код

class PaginatorComponent extends Object {
    public $limit = 0;                   
    public $countPages = 1;        
    public $page = null;           
    public $update = 'content';    
    private $params = array();
    private $controller;
    
    static $page;
    static $update;
    static $countPages;


вызывает ошибку
Цитата

Fatal error: Cannot redeclare PaginatorComponent::$page


Это сообщение отредактировал(а) MyDarkSide - 20.10.2009, 09:58
PM ICQ   Вверх
bars80080
Дата 19.10.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



интересно, а как внутри класса отличить одни свойства от других?
ты же к ним обращаешься $this->page . где здесь видно, какой тип?
PM MAIL WWW   Вверх
MyDarkSide
Дата 19.10.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: нет
Всего: -1



 smile 
$this->page - для обычного;
self::$page  - для статического;
PM ICQ   Вверх
bars80080
Дата 19.10.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ммм, какие штуки бывают
но всё равно, ИМХО, для интерпретатора они в одной гребёнке. внутри класса они всё же в одной области видимости
PM MAIL WWW   Вверх
NewDima
Дата 19.10.2009, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



MyDarkSide, по вашему в классе нельзя к статической переменной обратиться как $this->page?
Вы ошибаетесь
PM ICQ   Вверх
MyDarkSide
Дата 20.10.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: нет
Всего: -1



NewDima,  позвольте с вами  не согласиться
Код

<?php
  error_reporting(E_ALL);
  Class A {
    public $a = 10;
    static $b = 20;
    function __construct() {
      echo $this->b. ",";
      $this->b = 30;
      echo $this->b;
    }
  }
  
  $r = new A;
?>

выводит:
Цитата

Notice: Undefined property: A::$b in C:\noname1.php on line 7
,30

а должен был бы тогда выводить 20,30

Это сообщение отредактировал(а) MyDarkSide - 20.10.2009, 09:57
PM ICQ   Вверх
MyDarkSide
Дата 20.10.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: нет
Всего: -1



При чем в самом ядре PHP прекрасно в них разбирается:
Код

<?php
  error_reporting(E_ALL);
  Class A {
    public $a = 10;
    static $b = 20;
    function __construct() {
      $this->b = 30;
    }
  }
  
  $r = new A;
  $z = new A;
  
  echo A::$b ,  ", " ,  $r->b . "({$z->b})";
  
  A::$b = 77;
  $r->b = 44;
  $z->b = 55;

  echo "\r" . A::$b , ", " , $r->b . "({$z->b})";
?>

Выводит:
Цитата

20, 30(30)
77, 44(55)


Поэтому вероятно есть два варианта:
1. баг в парсере кода
2. так сделано специально, для защиты от запутанного кода
PM ICQ   Вверх
Kevin
Дата 20.10.2009, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.11.2005

Репутация: 2
Всего: 2



То что статичная переменная находится в той же области видимости, 
что и публичная — это все правильно, параметр доступа и область 
видимости вещи несколько разные, и то что он не дает явно 
инициализировать такую переменную — это правильно. 

Но то, что он сам может объявить публичную переменную — 
это странно и плохо, видать виной необязательность 
инициализации переменных:
Код
<?php
error_reporting(E_ALL);
class A {
    static $a = 10;
    function __construct() {
        $this->a = 20;
        echo 'public ', $this->a, ' != static ', self::$a; // 20 != 10
    }
}
$a = new A;
echo '<br />public ', $a->a, ', static ', A::$a;
?>


Это сообщение отредактировал(а) Kevin - 20.10.2009, 12:52
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.