Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem OOP
Forum PHP.pl > Forum > PHP > Object-oriented programming
frytek92
Witam ostatnio zaczełem uczyc sie programowania oop. I tutaj mam taka konstrukcje i nie mam pojecia czemu mi nie działa.

  1.  
  2. <?php
  3.  
  4. class new_object {
  5.  
  6. public $new_value;
  7.  
  8. function __construct(){
  9.  
  10. $object_value = $this -> new_value;
  11.  
  12. }
  13.  
  14. function echo_system(){
  15.  
  16. echo $object_value;
  17.  
  18. }
  19.  
  20. }
  21.  
  22. ?>
  23.  
marcinpruciak
Nie działą, bo cała konstrukcja jest bez sensu i nie ma przekazanych wartości do konstruktora. 

Powinno to wyglądać tak:

  1. class new_object {
  2.  
  3. public $new_value;
  4.  
  5. function __construct($object_value){
  6.  
  7.  $this -> new_value = $object_value;
  8.  
  9. }
  10.  
  11. $object = new new_object($object_value);
  12.  
  13. echo $object->new_value;




frytek92
Chodzi mi o coś innego zeby w jednej funkcji zdefinowac zmienne ktore bede mógł używać w innych.
Vielta
  1. <?php
  2. class new_object {
  3. private $new_value;
  4.  
  5. public function __construct($new_value) {
  6. $this->new_value = $new_value;
  7. }
  8.  
  9. public function echo_system() {
  10. echo $this->new_value;
  11. }
  12. }

Takie coś?
frytek92
Dokładnie mi chodzi zeby za pomoca __construct można było definować zmienne. A potem np przez inne metody je wyswietlać.

  1.  
  2. $object -> new_value = 'Witaj';
  3.  
  4. $object -> echo_system();
  5.  
vokiel
Raczej tak:

  1. $object = new new_object('Witaj');
  2. $object -> echo_system();


BTW Pierwszego posta "zaczełem"??
frytek92
Juz sobie poradzilem troche innego sposobu uzyłem smile.gif zabawa z globalami wiem ze to nie jest nurt oop ale wazne ze dziala i to bardzo dobrze.

chodzilo mi dokladnie o cos w stylu smile.gif :

  1.  
  2. class company_class {
  3.  
  4. public $new_value;
  5. public $new_type;
  6.  
  7. function __construct(){
  8.  
  9. global $new;
  10.  
  11. $new['value'] = 'Wartosc';
  12.  
  13.  
  14. }
  15.  
  16. function see_echo(){
  17.  
  18. echo $new['value'];
  19.  
  20. }
  21.  
-=Peter=-
Cytat
zabawa z globalami wiem ze to nie jest nurt oop ale wazne ze dziala i to bardzo dobrze.

Oj, wstydziłbyś się pisać takie coś w forum o OOP oraz podawać taki zbereźny kod... tongue.gif Jeśli już chcesz takie coś osiągnąć, to poczytaj o metodach magicznych __get() oraz __set(), one są rozwiązaniem Twojego problemu, a nie jakieś zmienne globalne...

Edit: jako iż mam dobry humor napiszę Ci uproszczone rozwiązanie Twojego problemu (pisane z palca):

  1. class Company{
  2. private $value;
  3. private $type;
  4. private $data = array();
  5.  
  6. public function __construct(){
  7. $this->wartosc = 'Wartosc';
  8. }
  9.  
  10. public function print(){
  11. return $this->wartosc;
  12. }
  13.  
  14. public function __get($name){
  15. return isset($this->data[$name]) ? $this->data[$name] : null;
  16. }
  17.  
  18. public function __set($name, $value){
  19. $this->data[$name] = $value;
  20. }
  21. }
  22.  
  23. $obj = new Company();
  24. echo $obj->print();


Powinno nawet działać bez metod magicznych __get i __set (ułomność php). Jednak najlepszym rozwiązaniem tego problemu będzie utworzenie odpowiednich składowych tej klasy. To składowe służą do tego celu, który chcesz osiągnąć, czyli przykładowo:

  1. class Company{
  2. private $wartosc;
  3.  
  4. public function __construct(){
  5. $this->wartosc = 'wartosc';
  6. }
  7.  
  8. public function getWartosc(){
  9. return $this->wartosc;
  10. }
  11. }
frytek92
I oto mniej więcej mi chodziło każdemu z was daje po pochwale bo każdy mi w jakikolwiek sposób pomógł.

Pozdrawiam i uważam temat za zamknięty.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.