2011-07-29 5 views
1
<?php 
    global $words; 

    class A { 

     function say() 
     { 
      global $words; 
      $words = 'man'; 
      A::hello(); 
      A::bye(); 

      echo $words; 
     } 

     function hello(){ 
      global $words; 
      $words .= 'hello'; 
     } 

     function bye(){ 
      global $words; 
      $words .= 'bye'; 
     } 

    } 
    A::say(); 
?> 

Я думаю, что это глупо, Можете ли вы указать мне хороший способ?php4 - Должен ли я использовать глобальные переменные в этом случае?

+3

вы не должны использовать больше не поддерживается версия PHP, его опасно. из руководства «Поддержка PHP 4 была прекращена с 2007-12-31. Пожалуйста, подумайте об обновлении до PHP 5.» –

+0

@ Дагон: я знаю, но я должен заботиться о php4: D – Chameron

+0

нет, вы этого не сделаете. –

ответ

2

Объявить $words как статическая переменная в классе:

class A { 
    static $words; 

    static function say() { 
     self::$words = 'man'; 
     A::hello(); 
     A::bye(); 

     echo self::$words; 
    } 

    static function hello() { 
     self::$words .= 'hello'; 
    } 

    static function bye() { 
     self::$words .= 'bye'; 
    } 
} 

A::say(); 
+0

Будет ли он работать с php4? – Chameron

+0

Да. Читайте больше на: http://php.net/manual/en/language.oop5.static.php Обратите внимание, что PHP4 не поддерживает модификаторы доступа. Кроме того, вам может потребоваться пространство имен для ссылок из '$ words' в' self :: $ words'. Не уверен, что PHP заставляет вас это делать. –

+0

php4.4.6: Ошибка анализа: ошибка синтаксического анализа, неожиданный T_STATIC, ожидающий T_OLD_FUNCTION или T_FUNCTION или T_VAR или '} – Chameron

1

код PHP4 (совместим с PHP5).

class A { 

    var $words; 

    function A($words) { 
     $this->words = $words; 
    } 

    function say() { 
     $this->words = 'man'; 
     $this->hello(); 
     $this->bye(); 
     return $this->words; 
    } 

    function hello() { 
     $this->words .= 'hello'; 
    } 

    function bye() { 
     $this->words .= 'bye'; 
    } 
} 

$a = new A($words); 
echo $a->say(); 

В общем, you do not want to use the global keyword when doing OOP. Pass any dependencies through the ctor or via appropriate setters. Опираясь на globals, вы быстро вводите побочные эффекты в свое приложение, прерываете инкапсуляцию и заставляете ваш API лгать о своих зависимостях. You should also avoid all static classes, потому что они будут тесно связывать вызывающий класс со статическим классом. Это делает обслуживание и тестирование более болезненными, чем это необходимо (то же самое для глобалов).

Также см https://secure.wikimedia.org/wikipedia/en/wiki/Solid_(object-oriented_design)

+0

Спасибо, я изменил способ использования класса – Chameron

Смежные вопросы