• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Atrybuty klasy w PHP (problem)

Object Storage Arubacloud
0 głosów
797 wizyt
pytanie zadane 4 sierpnia 2015 w PHP przez DL TD Nałogowiec (36,710 p.)

Mam taki prosty kod:

<?php
  class nazwaklasy {
    public $atrybut;
  }

  $a = new nazwaklasy();
  $this->$atrybut = "wartość";
  echo $this->$atrybut;

Nie mam pojęcia dlaczego nie działa :/

1 odpowiedź

+4 głosów
odpowiedź 4 sierpnia 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 4 sierpnia 2015 przez DL TD
 
Najlepsza

Nie działa bo to co napisałeś nie ma żadnego sensu.

Powinno być tak:

<?php
  class nazwaklasy {
    public $atrybut;
  }
 
  $a = new nazwaklasy();
  $a->atrybut = "wartość";
  echo $a->atrybut;

$this używa się tylko wewnątrz klasy bo wskazuje to na obiekt na którym obecnie wykonywane są działania.

komentarz 4 sierpnia 2015 przez DL TD Nałogowiec (36,710 p.)
Dziękuję za pomoc!
komentarz 4 sierpnia 2015 przez DL TD Nałogowiec (36,710 p.)

Mam jeszcze dodatkowe pytanie z takim kodem, nie mam pojęcia gdzie zrobiłem błąd, a nie chcę tworzyć nowego tematu (przepraszam za kłopot):

<?php
  class ClassName {
    public $atrybut;

    function __get($nazwa) {
      return $this->$nazwa;
    }
    function __set($nazwa, $wartosc) {
      $this->$nazwa = $wartosc;
    }
  }

  $a = new ClassName();
  $a->$atrybut = 5;

komentarz 4 sierpnia 2015 przez efiku Szeryf (75,160 p.)
http://3v4l.org/6edQ6

Uważaj z metodami magicznymi..
komentarz 4 sierpnia 2015 przez DL TD Nałogowiec (36,710 p.)

Dziękuję @efik. Analizowałem to co mi wysłałeś przez 5 minut i nie umiałem znaleźć błędu w swoim kodzie xD Błąd leżał w znaku $. Dziękuję!

komentarz 4 sierpnia 2015 przez efiku Szeryf (75,160 p.)
Przecież Notice i Fatal Error dokładnie mówią Ci co jest nie tak w tym kodzie ^^
komentarz 4 sierpnia 2015 przez DL TD Nałogowiec (36,710 p.)

Dziękuję za radę. Co jest z nimi nie tak?

bdw Usunąłem funkcje z klasy ClassName i efekt jest ten sam. Nic już nie rozumiem :(

To daje taki sam efekt:

  class ClassName {
    public $atrybut;
  }

  $a = new ClassName();
  $a->atrybut = 5;
  print_r($a);

jak to:

  class ClassName {
    public $atrybut;

    function __get($nazwa) {
      return $this->$nazwa;
    }
    function __set($nazwa, $wartosc) {
      $this->$nazwa = $wartosc;
    }
  }

  $a = new ClassName();
  $a->atrybut = 5;
  print_r($a);

Funkcja __get ma zwracać $atrybut, a __set go przypisać. Bez tego kod działa WTF? surprise

komentarz 4 sierpnia 2015 przez DL TD Nałogowiec (36,710 p.)

Właśnie nie ogarniałem tych komunikatów.

Pomyślałem tak: Przecież zmienną atrybut mam, a z tą pustą wartością to już całkowicie się zmieszałem indecision

komentarz 4 sierpnia 2015 przez efiku Szeryf (75,160 p.)
Ty w ogóle wiesz dlaczego masz te funkcje, czy to jest c&p?
Poczytaj o magicznych metodach

przeładowujesz get i set np jak chcesz coś do nich dodać, jakiś listener albo logger.
Patrz, zmodyfikowałem get http://3v4l.org/Y8153 Jeżeli pobierzesz nieistniejący property (nie wiem jak to nazwać po polsku)  zwróci false a nie Notice.
komentarz 5 sierpnia 2015 przez DL TD Nałogowiec (36,710 p.)

Dziękuję za pomoc. Już wiem trochę więcej i napisałem coś takiego:

class ClassName {
    private $memory = array();

    function __set($co, $wartosc) {
      $this->memory[$co] = $wartosc;
      echo "Pamiętam słowo $co.<br />";
    }

    function __get($co) {
      return $this->memory[$co];
    }
  }

  $tmp = new ClassName();
  $tmp->lew = "zwierze";
  echo "Jest to ".$tmp->lew.".";

 

Podobne pytania

0 głosów
1 odpowiedź 159 wizyt
pytanie zadane 20 kwietnia 2020 w Python przez Aqua Obywatel (1,950 p.)
+1 głos
0 odpowiedzi 82 wizyt
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 24 kwietnia 2018 w HTML i CSS przez Neneko Nowicjusz (170 p.)

92,580 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...