Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Klasy
#1
Co tu trzeba dopisac , żeby funkcja __get(); wyświetliła wartość. Dla __set(); jest chyba dobrze, nie ?

Kod:
class nazwaklasy
{
    public $atrybut;
    function __get($nazwa)
    {
        return $this->$nazwa;
    }
    function __set($nazwa, $wartosc)
    {
        $this->$nazwa = $wartosc;
    }
}

$a = new nazwaklasy();
echo $a->$atrybut = 5;
$a->$atrybut;
Nie ma głupich pytań są tylko głupie odpowiedzi
Odpowiedz
#2
Oj, chopie...

Co to jest $atrybut? Jak chcesz ustawić atrybut klasy za pomocą magicznej metody __set(), albo go pobrać za pomocą __get() to musisz podać jego nazwę, a nie jakąś zmienną. Skąd Ty ją w ogóle wziąłeś?

A tak w ogóle to masz namieszane coś z wyświetlaniem błędów, bo interpreter powinien Ci wyrypać błąd o niezdefiniowanej zmiennej.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#3
czyli:

public $atrybut;
function __get()
{
return $this->$atrybut;
}

a jak set to:

$this->$atrybut = $zmienna;
Odpowiedz
#4
(25-09-2012, 17:43)Radian napisał(a): ciach
Też nie, bo robisz ten sam błąd:

Gościu ma tak:
Kod:
$a = new nazwaklasy();
echo $a->$atrybut = 5;
$a->$atrybut;

a bez zdefiniowania zmiennej atrybut powinien mieć tak:
Kod:
$a = new nazwaklasy();
$a->atrybut = 5;
echo $a->atrybut
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#5
W takiej postaci zmienna atrybut sie wyswietla czy co to tam jest..

Kod:
class nazwaklasy
{
    public $atrybut;
    
    function __set($nazwa, $wartosc)
    {
        $this->$nazwa = $wartosc;
    }
}

$a = new nazwaklasy();
echo $a->$atrybut = 5;
Nie ma głupich pytań są tylko głupie odpowiedzi
Odpowiedz
#6
Przyjacielu,

kod:
Kod:
<?php

class nazwaklasy
{
    public $atrybut;
    
    function __set($nazwa, $wartosc)
    {
        $this->$nazwa = $wartosc;
    }
}

$a = new nazwaklasy();
echo $a->$atrybut = 5;
zwraca dokładnie:
Kod:
( ! ) Notice: Undefined variable: atrybut in /var/www/class.php on line 14
Call Stack
#    Time    Memory    Function    Location
1    0.0003    127344    {main}( )    ../class.php:0

( ! ) Fatal error: Cannot access empty property in /var/www/class.php on line 9
Call Stack
#    Time    Memory    Function    Location
1    0.0003    127344    {main}( )    ../class.php:0
2    0.0008    127704    nazwaklasy->__set( )    ../class.php:14

a spróbuj tak:
Kod:
$a = new nazwaklasy();
$a->atrybut = 5;
$a->atrybut
zwróci Ci ładnie 5.

Poczytaj sobie od razu:
http://php.net/manual/en/language.oop5.overloading.php
http://php.net/manual/en/language.oop5.magic.php
http://php.net/manual/en/language.oop5.overloading.php#object.set

Dodatkowo, takie coś Ci nie zadziała
Kod:
$a = $obj->b = 8;
, bo obiekty w PHP są przekazywane przez referencję.

Zanim zaczniesz podstawy z OOP, poznaj najpierw podstawy języka, bo masz słabo z nimi stoisz Smile Bez złośliwości, unikniesz złości i irytacji.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#7
To ja nie rozumiem jakim cudem u mnie nie ma błędów!? xD Ja własnie jade od podstaw z tym wraz z kursem... =p
Nie ma głupich pytań są tylko głupie odpowiedzi
Odpowiedz
#8
Bo masz wyłączone wyświetlanie błędów w php.ini.
Dobre samopoczucie w tym tygodniu sponsoruje cytat:
Cytat:Mogę tylko tylko na prawo i lewo ale na środek nie mogę.
Odpowiedz
#9
Ale wynik tez niby zwraca dobry... =p
Nie ma głupich pytań są tylko głupie odpowiedzi
Odpowiedz
#10
(26-09-2012, 05:00)xtronix856 napisał(a): Ale wynik tez niby zwraca dobry... =p

I to jest najgorsze. Robisz coś źle, a wynik masz dobry. 100% gwarancji na posypanie całej aplikacji + wiele godzin szukania błędów Big Grin
Odpowiedz


Skocz do:


Użytkownicy przeglądający ten wątek: 2 gości
Sponsorzy i przyjaciele
SeoHost.pl