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

PHP obiektowe pytanie teorytyczne

Object Storage Arubacloud
0 głosów
265 wizyt
pytanie zadane 24 maja 2017 w PHP przez Justyna Obywatel (1,210 p.)

Hej mam pytanie dlaczego jest tak że, używamy tego $this ->

np w przykładzie :

        public function returnValue() {
            return $this-> countPeople;
        }


       Jakby nie można było wypisać return $countPeople;

 

I drugie pytanie, dlaczego wtedy po $this -> wypisujemy bez znaku dolara zmienna? dlaczego tak jest?

<?php
	class school 
	{
		
		public $countPeople;
		public $numberIndex;
		public $name;
	
		
		public function __construct($countPeople, $numberIndex, $name) {
			echo 'Utworzono studenta ' . __CLASS__ . ' nowego <br />';
			$this->countPeople = $countPeople;
			$this->numberIndex = $numberIndex;
			$this->name = $name;
			
		}
		
		public function setName($noweImie) {
			
			$this->name = $noweImie;
		}
		
		public function returnValue() {
			return $this-> countPeople;
		}
		
		
		public function writeAll() {
			echo $this-> countPeople . '<br />';
			echo $this-> numberIndex . '<br />';
			echo $this-> name . '<br />';
		}


	}
	
	$student = new school(22,24, "ADAM");
	echo $student->returnValue();
	$student->writeAll();
	
	?>

Wiem głupie pytania strasznie, ale strasznie tego zrozumieć nie mogę. Dziękuję bardzo :)

1 odpowiedź

0 głosów
odpowiedź 24 maja 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 24 maja 2017 przez Justyna
 
Najlepsza

       Jakby nie można było wypisać return $countPeople;

A masz gdzieś w tej funkcji zmienną $countPeople? Nie masz, a zmienne widoczne są tylko w obrębie jednej funkcji. Więc odwołanie do samego $countPeople spowoduje błąd. Dlatego przy użyciu $this odwołujesz się do właściwości obiektu, którą masz wcześniej zdefiniowaną.

dlaczego wtedy po $this -> wypisujemy bez znaku dolara zmienna? dlaczego tak jest?

Tak jest a dlaczego... nie wiem, po prostu, ktoś tworząc język PHP tak wymyślił :P 

Jeśli wywołasz właściwość ze znakiem $ to właściwie nie będzie wywołanie właściwości o takiej nazwie, a wywołanie właściwości o nazwie ze zmiennej.

$this->countPeople ← szuka takiej właściwości obiektu
$this->$countPeople ← odczytuje wartość zmiennej $countPeople, podstawia ją tu i szuka właściwości o takiej nazwie

Mam nadzieję, że trochę rozjaśniłem.

komentarz 24 maja 2017 przez Justyna Obywatel (1,210 p.)

Okej rozumiem, a teraz mam pytanie jak wypisać zmienna z private?:)

<?php
	class school 
	{
		
		public $countPeople;
		public $numberIndex;
		public $name;
		private $id;
		
		public function __construct($countPeople, $numberIndex, $name) {
			echo 'Utworzono studenta ' . __CLASS__ . ' nowego <br />';
			$this->countPeople = $countPeople;
			$this->numberIndex = $numberIndex;
			$this->name = $name;
			
		}
		
		public function setID($newID) {
			$this-> id = $newID;
		}
		
		public function getID() {
			return $this-> id;
		}
		
		public function setName($noweImie) {
			
			$this->name = $noweImie;
		}
		
		public function returnValue() {
			return $this-> countPeople;
		}
		
		
		public function writeAll() {
			echo $this-> countPeople . '<br />';
			echo $this-> numberIndex . '<br />';
			echo $this-> name . '<br />';
			echo $this-> id . '<br />';
		}

		
	}
	
	$student = new school(22,24, "ADAM");
	echo $student->returnValue();
	$student->writeAll();
	echo $student->name;
	
	$student->setID(414141);
	$student->getID();
	
	echo $student->name;
	?>

 

komentarz 24 maja 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Na przykład tak jak teraz to robisz, poprzez metodę (u Ciebie getID). Powinna działać, tylko do wypisania brakuje Ci przed tym echo.
komentarz 24 maja 2017 przez Justyna Obywatel (1,210 p.)

Ok przedostatnie pytanie :P (takie małe rozpoznanie robię szybkie:D)

Jak przesłać do funkcji doThat, zmienne klasy $countPeople i $id, oraz jak zsumować ze sobą te dwie wartości w funkcji?

 

<?php
	class school 
	{
		
		public $countPeople;
		public $numberIndex;
		public $name;
		private $id;
		
		public function __construct($countPeople, $numberIndex, $name) {
			echo 'Utworzono studenta ' . __CLASS__ . ' nowego <br />';
			$this->countPeople = $countPeople;
			$this->numberIndex = $numberIndex;
			$this->name = $name;
			
		}
		
		public function setID($newID) {
			$this-> id = $newID;
		}
		
		public function getID() {
			return $this-> id;
		}
		
		public function setName($noweImie) {
			
			$this->name = $noweImie;
		}
		
		public function returnValue() {
			return $this-> countPeople;
		}
		
		
		public function writeAll() {
			echo $this-> countPeople . '<br />';
			echo $this-> numberIndex . '<br />';
			echo $this-> name . '<br />';
			echo $this-> id . '<br />';
		}

		public function doThat($countPeople, $id) {
			$this -> countPeople;
			$this -> id;
			
			echo "siema";
		}
		
	}
	
	$student = new school(22,24, "ADAM");
	echo $student->returnValue();
	$student->writeAll();
	echo $student->name;
	
	$student->setID(414141);
	echo $student->getID();
	
	echo $student->name;
	$student -> doThat();
	
	
	?>

 

komentarz 24 maja 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)

Co rozumiesz przez przesłanie do metody doThat? Jeśli przesłanie wartości z tego obiektu to wystarczy użycie $this tak jak to robisz.

public function doThat() {
      $sum = $this->countPeople + $this->id;
      // ...
}

A jeśli z zewnątrz to można zrobić to przez argumenty funkcji, które też z resztą dodałaś.

komentarz 24 maja 2017 przez Justyna Obywatel (1,210 p.)
Okej to teraz pytanie jeśli tworzę jakiś serwis i np robię dodawanie komentarzy oraz rejestrację użytkownika to ciągle trzeba robić zapytania wiec żeby uniknąć powtórzeń kodu to najlepiej zrobić klasę i tam w niej funkcję  która parametrem będzie przyjmować zapytanie sql?

Czy jak by to wyglądało w przypadku zapytań do bazy??
komentarz 24 maja 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Zależy co i jak chcesz zbudować. Jeśli nic dużego to możesz nawet skorzystać z PDO, tam od razu masz metodę query() czy prepare().

No a jeśli chcesz swoją klasę to tak, coś co przyjmie zapytanie, ewentualnie jakieś uproszczenie do bindowania itd.
komentarz 24 maja 2017 przez Justyna Obywatel (1,210 p.)
Okej dziękuje za pomoc :)
komentarz 25 maja 2017 przez Justyna Obywatel (1,210 p.)
Jeśli bym robiła w tej chwili dodawanie ofert do bazy to potrzebowałabym stworzyć klasę Oferta i poza nią funkcje która parametrem przyjmowałaby obiekt tejże klasy?

Klasa oferta -> pola by miała nazwa, miasto

 

Jesli bym rozszerzyła funkcjonalność o dodawanie komentarzy, rejestrację, to można byłoby klasę stworzyć baza, która by miała funkcję AddOfert, AddComment, AddUser, czy nie byłoby sensu robić klasy i zostać przy oddzielnych funkcjach PHP po prostu?

 

Chodzi mi o to czy dobrze rozumuję idee tworzenia takich serwisów obiektowo.
komentarz 25 maja 2017 przez efiku Szeryf (75,160 p.)
Przeczytaj link który tu wstawiłem ;)

Podobne pytania

0 głosów
1 odpowiedź 225 wizyt
pytanie zadane 29 maja 2017 w PHP przez Justyna Obywatel (1,210 p.)
0 głosów
1 odpowiedź 133 wizyt
0 głosów
1 odpowiedź 137 wizyt

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 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!

...