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

Dlaczego w tym kodzie wyświtla mi błedy

VPS Starter Arubacloud
0 głosów
142 wizyt
pytanie zadane 25 października 2015 w PHP przez Silverwind Użytkownik (730 p.)
<?php
 class  nazwaklasy
{
	public $atrybut;
	
}
$p1=new nazwaklasy();
$p1->$atrybut = "pies";
echo $p1->$atrybut;
?>

Wyrzacami Notice: Undefined variable: atrybut in

Fatal error: Cannot access empty property in

podałem przecież atrybut.

2 odpowiedzi

+1 głos
odpowiedź 25 października 2015 przez Dorion300 Szeryf (90,250 p.)
wybrane 25 października 2015 przez Silverwind
 
Najlepsza
<?php
class nazwaklasy
{
    public $atrybut;
}

$p1=new nazwaklasy();
$p1->atrybut = "pies";
echo $p1->atrybut;
?>

 

+3 głosów
odpowiedź 25 października 2015 przez furas Maniak (53,800 p.)

Powinno być bez $

$p1->atrybut = "pies";
echo $p1->atrybut;

Użycie $ oznacza: pobierz z `$pl` zawartość atrybutu, którego nazwa podana jest w lokalnej zmiennej `$atrybut`

komentarz 25 października 2015 przez Silverwind Użytkownik (730 p.)
Tego właśnie chyba nie rozumiem. Dlaczego ta zmienna jest bez dolara i jak jest różnica pomiędzy $atrybut a atrybut
komentarz 25 października 2015 przez furas Maniak (53,800 p.)

Tak sobie wymyślono, że dolar rozpoczyna osobną zmienną. Jeśli zrobisz 

$nazwa = 'kolor'

echo $p1->$nazwa

to będzie to równoważne z

echo $p1->kolor

W ten sposób można dynamicznie wybierać jaką wartość chcesz pobrać z klasy.
Może to być przydatne bo możesz w zmiennej $nazwa podać nazwę zależnie od wyboru użytkownika lub wczytać tą wartość z pliku lub bazy danych.

komentarz 25 października 2015 przez Silverwind Użytkownik (730 p.)
Czytałaś w ogóle o co mi chodzi. wiem że tak się deklaruje zmienne chodzi mi o różnice pomiędzy dostęp do niej  $p->$atrybut a

$p->atrybut
komentarz 25 października 2015 przez furas Maniak (53,800 p.)
edycja 25 października 2015 przez furas

Tak jak napisałe powyżej 

$p->atrybut;

Powyższe odwołuje się bezpośrednio do atrybutu o nazwie `atrybut` w obiekcie $p

$p->$atrybut;

Powyższe szuka zmiennej lokalnej o nazwie `$atrybut` i jej zawartość zostaje wykorzystana jako nazwa zmiennej pobieranej z obiektu $p. 

$atrybut = 'kolor'; // zmienna lokalna zawierająca nazwę atrybutu

$p->$atrybut; // rownowazne z $p->kolor

// --

$atrybut = 'atrybut'; // zmienna lokalna zawierająca nazwę atrybutu

$p->$atrybut; // rownowazne z $p->atrybut

 

komentarz 25 października 2015 przez Silverwind Użytkownik (730 p.)

Ja mam już mętlik w głowie :

1 kod

<?php
 class  nazwaklasy
{
	public $atrybut;
}
$p1=new nazwaklasy();

$p1->atrybut="pies";
echo $p1->atrybut;
?>

wypisze mi pies i jest wszystko oki

2 kod

<?php
 class  nazwaklasy
{
	public $atrybut;
}
$p1=new nazwaklasy();

$p1->$atrybut="pies";
echo $p1->$atrybut;
?>

wyrzucami błędy.Dlaczego zmienna jest bez dolara. .

 

komentarz 25 października 2015 przez furas Maniak (53,800 p.)
Twórcy języka wymyśli, że dolar jest sygnałem, że zaczyna się nazwa osobnej zmiennej.

Przy deklaracji zmiennej w klasie można użyć krótkiego zapisu ale już w metodach trzeba podać pełną nazwę dodając $this . A poza klasą trzeba dodac nazwę obiektu.

Możesz na to patrzyć jak na poniższe (choć nie jest to zapis, który zadziała)

${ atrybut } , ${ p1->atrybut }, ${ this->atrybut }

Podobne pytania

0 głosów
2 odpowiedzi 135 wizyt
pytanie zadane 5 listopada 2020 w C i C++ przez tonn204 Mądrala (7,470 p.)
0 głosów
3 odpowiedzi 1,881 wizyt
pytanie zadane 3 grudnia 2017 w PHP przez Krzysio4224 Obywatel (1,690 p.)
0 głosów
1 odpowiedź 172 wizyt

92,975 zapytań

141,938 odpowiedzi

321,181 komentarzy

62,302 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...