За последние 24 часа нас посетили 33002 программиста и 1821 робот. Сейчас ищут 872 программиста ...

Не могу составить Hello World на ООП, помогите разобраться

Тема в разделе "PHP для новичков", создана пользователем alex455, 26 июл 2011.

  1. alex455

    alex455 Активный пользователь

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    PHP:
    1. <?php
    2. class Messages {
    3.     public $hello = "Hello world!";
    4.    
    5.     public function SayHello() {
    6.         return $hello;
    7.     }
    8. }
    9.  
    10. $isay = new Messages;
    11.  
    12. echo $isay -> SayHello();
    13. ?>
    Ничего не выводит, хотя должен выводить "Hello World!". Что я делаю не так?
     
  2. georgela

    georgela Активный пользователь

    С нами с:
    11 май 2011
    Сообщения:
    395
    Симпатии:
    0
    PHP:
    1. <?php
    2.  class Messages {
    3.      public $hello = "Hello world!";
    4.    
    5.      public function SayHello() {
    6.    
    7.  return $hello; //Так он юзает локальную переменную которая = пусторй строке
    8.      return $this->hello; //Юзай эту тему
    9. }
    10.  }?>
    11.  
     
  3. alex455

    alex455 Активный пользователь

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    Да, работает, спасибо.

    Почему пустой? Я не задавал пустую строку.

    Объясните простым языком, что делает переменная $this?
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Почитай про область видимости переменных.
     
  5. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    $this - это текущий объект
     
  6. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?
    2.  interface if0 {
    3.      public function pHello();
    4.  }
    5.  interface if1 {
    6.      public function pWorld();
    7.  }
    8.  interface if2 {
    9.      public function pSq();
    10.  }
    11.  class World implements if1 {
    12.      public function pWorld() {
    13.          try {
    14.              $this->text = 'World!';
    15.              if (!print $this->text) {
    16.                  throw new Exception();
    17.              }
    18.          } catch (Exception $e) {
    19.              echo $e->getMessage();
    20.          }
    21.          return $this;
    22.      }
    23.    
    24.      public function __set($name, $value) {
    25.          $this->$name = $value;
    26.      }
    27.    
    28.      public function __get($name) {
    29.          return $this->$name;
    30.      }
    31.  }
    32.  class Hello extends World implements if0, if2 {
    33.      public function pHello() {
    34.          try {
    35.              $this->text = 'Hello';
    36.              if (!print $this->text) {
    37.                  throw new Exception();
    38.              }
    39.          } catch (Exception $e) {
    40.              echo $e->getMessage();
    41.          }
    42.          return $this;
    43.      }
    44.    
    45.      public function pSq() {
    46.          try {
    47.              $this->text = ', ';
    48.              if (!print $this->text) {
    49.                  throw new Exception();
    50.              }
    51.          } catch (Exception $e) {
    52.              echo $e->getMessage();
    53.          }
    54.          return $this;
    55.      }
    56.    
    57.      public function __set($name, $value) {
    58.          $this->$name = $value;
    59.      }
    60.    
    61.      public function __get($name) {
    62.          return $this->$name;
    63.      }
    64.  }
    65.  $obj = new Hello;
    66.  $obj->pHello()->pSq()->pWorld();
     
    twim32 нравится это.
  8. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    [vs]
    зачёт! )))))
     
  9. alex455

    alex455 Активный пользователь

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    А насчёт
    О какой пустой строке шла речь?
     
  10. georgela

    georgela Активный пользователь

    С нами с:
    11 май 2011
    Сообщения:
    395
    Симпатии:
    0
    alex455
    Область видимости этой функции не даёт ей переменную hello которая объявлена в классе =>этой переменная не объявлена,а как любая не объявленная переменная вывод её функцией echo даст пустую строку
     
  11. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Вообще тут получается обращение к необъявленной (несуществующей) переменной. При этом php генерирует ошибку уровня notice (если всключено отображение нотисов - появится в выводе), а значением этой переменной считает null. В php есть такая штука, как приведение типов переменных, в зависимости от контекста, в котором эти переменные используются. И когда null передаётся в echo - он преобразуется к пустой строке.
     
  12. alex455

    alex455 Активный пользователь

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    Код (Text):
    1. error_reporting = E_ALL | E_STRICT
    Правильная опция?