Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Pytanie dotyczące deklarowania zmiennych
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Pisząc klase natrafiłem chyba na błąd. Odpalcie sobie poniższy skrypt i napiszcie dlaczego php wyświetla go poprawnie? Przecież prywatna zmienna to _zmienna a nie zmienna exclamation.gif! A skrypt działa poprawnie...

  1. <?php
  2. class Test
  3. {
  4. private $_zmienna = null;
  5.  
  6. public function __construct($zmienna)
  7. {
  8. $this->zmienna = $zmienna;
  9. }
  10.  
  11. public function getZmienna()
  12. {
  13. return $this->zmienna;
  14. }
  15. }
  16.  
  17. $oTest = new Test('2007');
  18. echo 'Wartość zmiennej: ' . $oTest->getZmienna();
  19. ?>


Ten post edytował J4r0d 6.01.2007, 07:26:16


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




To nie błąd. Zważ, że w php możesz tworzyć składowe dynamicznie (publiczne). Zatem masz po prostu dwie zmienne - $_zmienna i $zmienna : )

Pozdrawiam, a życzenia w hydeparku : D


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Jarod
post
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(Cysiaczek @ 1.01.2007, 02:18:45 ) *
To nie błąd. Zważ, że w php możesz tworzyć składowe dynamicznie (publiczne). Zatem masz po prostu dwie zmienne - $_zmienna i $zmienna : )

Czyli jak spróbuję przypisać wartość do nie istniejącej zmiennej, to zostanie on utworzona i będzie publiczna?
To jest totalna głupota..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
pawel_k
post
Post #4





Grupa: Zarejestrowani
Postów: 211
Pomógł: 3
Dołączył: 29.07.2005
Skąd: Szczebrzeszyn

Ostrzeżenie: (0%)
-----


Cytat(J4r0d @ 1.01.2007, 11:34:26 ) *
Czyli jak spróbuję przypisać wartość do nie istniejącej zmiennej, to zostanie on utworzona i będzie publiczna?
To jest totalna głupota..

to uzywaj metod __set i __get i po sprawie. a glupota to nie jest, za duzo problemow by bylo z dzialaniem skryptow z php4 pod php5
Go to the top of the page
+Quote Post
Jarod
post
Post #5





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(pawel_k @ 1.01.2007, 11:47:17 ) *
to uzywaj metod __set i __get i po sprawie. a glupota to nie jest, za duzo problemow by bylo z dzialaniem skryptow z php4 pod php5


To bym musiał napisać metode __set() tylko po to, żeby wyświetlać errora, że próbowano zapisać do nie istniejącej zmiennej. Co do działania skryptów pisanych pod php4 to dla mnie php4 nie istnieje. Zresztą pisanie w php4 "obiektowo" też było głupotą.


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
hwao
post
Post #6


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




  1. <?php
  2. class Test
  3. {
  4. private $_zmienna = null;
  5.  
  6. public function __construct($zmienna)
  7. {
  8. $this->zmienna = $zmienna;
  9. }
  10.  
  11. public function getZmienna()
  12. {
  13. return $this->zmienna;
  14. }
  15.  public function __set( $prop, $value ) {
  16. thrown new Exception( 'Proba a przypisania nie istniejacej wlasnosci "'.$prop.'" wartosci "'.$value.'".' );
  17.  }
  18. }
  19.  
  20. $oTest = new Test('2007');
  21. echo 'Wartość zmiennej: ' . $oTest->getZmienna();
  22. ?>
Go to the top of the page
+Quote Post
Jarod
post
Post #7





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


@hwao: rozumiem, tylko jak popisze w innym języku to normalnie trafia mnie że php pozwala na takie głupoty.

Poza tym kiedyś poruszałem temat http://forum.php.pl/index.php?showtopic=59021&hl= na który niestety nikt nie odpowiedział. Skoro w php nie deklarjemy typu zmiennej to dlaczego w logach apacha po pewnym czasie mam dosyć dużo wpisów w stylu "została użyta zmienna, która nie została zadeklarowana.." :/

Ten post edytował J4r0d 1.01.2007, 14:56:59


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Cytat
tylko jak popisze w innym języku to normalnie trafia mnie że php pozwala na takie głupoty.

Jakim? C++, JAva C#?
Ok, ze skryptowych (ktore znam) Ruby sie czepia niezdefiniowanych zmiennych instancji.

Cytat
Skoro w php nie deklarjemy typu zmiennej to dlaczego w logach apacha po pewnym czasie mam dosyć dużo wpisów w stylu "została użyta zmienna, która nie została zadeklarowana.." :/

NIe typ zmiennej, ale sama zmienna. I tyczy sie to zmiennych globalnych i lokalnych, a nie zmiennych instancji (w obiektach)


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Jarod
post
Post #9





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(dr_bonzo @ 1.01.2007, 15:03:05 ) *
Jakim? C++, JAva C#?
Ok, ze skryptowych (ktore znam) Ruby sie czepia niezdefiniowanych zmiennych instancji.
NIe typ zmiennej, ale sama zmienna. I tyczy sie to zmiennych globalnych i lokalnych, a nie zmiennych instancji (w obiektach)

Nie chodzi mi o niezdefiniowane zmienne instancji. Ogólnie o niezdefiniowane. A swoją drogą nie sprawdzałem czy w C++/Javie będzie można zapisać do zmiennej instancji, której nie ma. To wyszło przez przypadek jak skorzystałem z podpowiadania składni eclipse - miałem podobne zmienne..
Muszę wyłączyć logowanie i będzie spokój bo apach potrafi zapchać dysk..


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Cytat
Muszę wyłączyć logowanie i będzie spokój bo apach potrafi zapchać dysk..

Jesli zatkam uszy na negatywna krytyke to wtedy bede idealny.

Nie tedy droga, nie chodzi o ukrywanie widocznych (tych ktore wiesz czemu sie pojawiaja) bledow tylko o ich poprawienie.


Cytat
Nie chodzi mi o niezdefiniowane zmienne instancji. Ogólnie o niezdefiniowane.

Ogolnie to sa to zupelnie rozne przypadki:

$aa = 3; // da ci errora

a

$this->aa = 3; // juz nie


Cytat
A swoją drogą nie sprawdzałem czy w C++/Javie będzie można zapisać do zmiennej instancji, której nie ma.

Ciekawe jak, przeciez to sie nawet nie skompiluje.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Jarod
post
Post #11





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(dr_bonzo @ 1.01.2007, 19:15:30 ) *
Jesli zatkam uszy na negatywna krytyke to wtedy bede idealny.

Nie tedy droga, nie chodzi o ukrywanie widocznych (tych ktore wiesz czemu sie pojawiaja) bledow tylko o ich poprawienie.


Rozumiem. Tylko, że w tym projekcie (był pisany strukturalnie) mógłbym poprawić. Tylko, że:
- tablice zdefiniuje jako $tablica = array();
i nie będzie wywalać błędów..

A jak z ze zmiennymi typu string czy integer lub float?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
jezoo
post
Post #12





Grupa: Zarejestrowani
Postów: 92
Pomógł: 3
Dołączył: 4.04.2006

Ostrzeżenie: (0%)
-----


php sam rozronia typ danych przypisanych do zmiennej i formatuje ja odpowiedznio wiec sie tym nie musisz martwic smile.gif
Go to the top of the page
+Quote Post
Jarod
post
Post #13





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(jezoo @ 1.01.2007, 19:20:59 ) *
php sam rozronia typ danych przypisanych do zmiennej i formatuje ja odpowiedznio wiec sie tym nie musisz martwic smile.gif

Nie rozumiesz o co mi chodzi albo ja trochę zamotałem smile.gif

Czyli każdą zmienną (bez względu na jej typ) zanim ją użyje muszę ją zapisać jako np:
  1. <?php
  2. $zmienna1 = null;
  3. $zmienna2 = '';
  4. (...)
  5. // I tu dopiero jakieś operacje na tych zmiennych ?
  6. ?>


Dokładnie w logach apacha mam takie wpisy:
Cytat
Undefined variable: PHP_SELF in usr/local/apache/htdocs/www/index.php on line 358

Z PHP_SELF mam mnóstwo wpisów - z każdego skryptu. Pojawiają się jeszcze wpisy na temat sesji:
Cytat
A session had already been started - ignoring session_start()

Startujemy sesje i jak nam wiadomo, jeśli sesja jest wystartowana to jest kontynuowana a nie tworzona od nowa - więc dlaczego sypie errory do pliku?

Ten post edytował J4r0d 1.01.2007, 19:33:41


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
jezoo
post
Post #14





Grupa: Zarejestrowani
Postów: 92
Pomógł: 3
Dołączył: 4.04.2006

Ostrzeżenie: (0%)
-----


nie to Ty mnie nie zrozumiales smile.gif albo obaj sie nie rozumimy smile.gif chodzilo mi oto ze w momencie robienia jakis operacji ktore zwracaja jakis wynik (string, int, double, etc...) to w tedy php formatuje je do odpowiedniego typu i nie musisz ich deklarowac jak to przedstawiles w swoim przykladzie smile.gif
Go to the top of the page
+Quote Post
Jarod
post
Post #15





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(jezoo @ 1.01.2007, 19:34:21 ) *
nie to Ty mnie nie zrozumiales smile.gif albo obaj sie nie rozumimy smile.gif chodzilo mi oto ze w momencie robienia jakis operacji ktore zwracaja jakis wynik (string, int, double, etc...) to w tedy php formatuje je do odpowiedniego typu i nie musisz ich deklarowac jak to przedstawiles w swoim przykladzie smile.gif

Ok to rozumiem. Mi chodzi o to, że w C++ czy innym języku zanim użyjesz w programie zmiennej, musisz ją zadeklarować bo program się nie skompiluje. php tego nie wymaga. Możesz w dowolnym momencie tworzyć zmienne. Ale jak coś takiego zrobisz to apache wrzuca mi do error_log apacha błędy w stylu:
Cytat
Undefined variable: tablica1 in usr/local/apache/htdocs/www/index.php on line 358


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
cadavre
post
Post #16





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Cytat
Startujemy sesje i jak nam wiadomo, jeśli sesja jest wystartowana to jest kontynuowana a nie tworzona od nowa - więc dlaczego sypie errory do pliku?
To są akurat notice'y. winksmiley.jpg Zapobiec można definiując start sesji tak:
  1. <?php
  2. if ( !session_id() ) { session_start(); }
  3. ?>


Cytat
$aa = 3; // da ci errora
Taka definicja nie daje przecież errora. Czy ja się mylę?

Sprawdzałem również definicje zmiennych poprzez (typ)$var; - również wywala Notice'a.

EDIT: A co do $_zmienna i $zmienna - php zaleca dobrym nawykiem zapisywanie zmiennych prywatnych poprzedzonych podkreślnikiem .

Ten post edytował cadavre 1.01.2007, 19:53:41


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


[quoet]Taka definicja nie daje przecież errora. Czy ja się mylę?[/quote]
Ajj, namieszalem. Moj blad. Nie daje. Myslalem o czym innym co innego zapisalem.

Chodzilo o to:
  1. <?php
  2. error_reporting(E_ALL | E_STRICT );
  3.  
  4. $a += 3; // Notice: Undefined variable: a
  5.  
  6. class Haha
  7. {
  8. public function doSth()
  9. {
  10. $this->aa = 3; // bez errora
  11. }
  12. public function doSthElse()
  13. {
  14. $this->sthelse += 3; // bez errora, a to dziwne :)
  15. }
  16. }
  17.  
  18. $hh = new Haha();
  19. $hh->doSth();
  20. $hh->doSthElse();
  21. ?>



Nie chodzi o definicje typu zmiennej tylko o jej deklaracje przed uzyciem, czyli zamiast
  1. <?php
  2. // a jaka wartosc ma $a tutaj?
  3. $a += 3; // ==> $a = $a + 3; i do jakiej wartosci dodajemy 3??
  4. ?>


tak:
  1. <?php
  2. $a = 0;
  3. $a += 3;
  4. ?>





PHP_SELF -- przeciez to od dawna nie istnieje


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Jarod
post
Post #18





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(dr_bonzo @ 1.01.2007, 20:05:48 ) *
PHP_SELF -- przeciez to od dawna nie istnieje

Nawet nie wiedziałem - działa :/
Co do pozostałych uwag to potestuję i posprawdzam.

Cytat(dr_bonzo @ 1.01.2007, 20:05:48 ) *
PHP_SELF -- przeciez to od dawna nie istnieje

Wogóle skąd masz takie informacje?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #19





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


$_SERVER[ 'PHP_SELF' ] istnieje, PHP_SELF nie

  1. <?php
  2. echo PHP_SELF;
  3. ?>

php Notice: Use of undefined constant PHP_SELF - assumed 'PHP_SELF' in .....


manual:
Cytat
$_SERVER
Note: Introduced in 4.1.0. In earlier versions, use $HTTP_SERVER_VARS.

a sama stala PHP_SELF to juz nie wiem kiedy zostala usunieta.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Jarod
post
Post #20





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

Ostrzeżenie: (0%)
-----


Cytat(dr_bonzo @ 5.01.2007, 23:04:04 ) *
$_SERVER[ 'PHP_SELF' ] istnieje, PHP_SELF nie

No ja cały czas korzystam z $_SERVER[ 'PHP_SELF' ]


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 23:25