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

PHP Obiektowe

VPS Starter Arubacloud
0 głosów
256 wizyt
pytanie zadane 28 maja 2017 w PHP przez Justyna Obywatel (1,210 p.)

Hej mam pytanie, napisałam kod po czym na końcu usunęłam zmienne a kod wciąż działa, dlaczego tak jest? przez construct? tylko tam jest $this-> który odwołuję sie do zmiennych w klasie, a je usunęłam to dlaczego kod wciąż działa i czy tak może ogólnie w takim razie być?

 

Czy te zmienne wypisywane są na początku ze wzg na modyfikator dostępu bo wnioskuję, że jak jest construct to nei trzeba wypisywac zmiennych?

<?php
	class School
	{
		
		public function __construct($x,$y,$z,$w) {
			$this->numberTeachers = $x;
			$this->numberStudents = $y;
			$this->nameDyrektor = $z;
			$this->nameStudent = $w;
		}
		
		public function getInformation() {
			echo $this->numberTeachers." ".
				 $this->numberStudents." ".
				 $this->nameDyrektor." ".
				 $this->nameStudent." ";
		}
		public function countAll() {
			echo $this->numberTeachers +
			$this->numberStudents +
			$this->nameDyrektor +
			$this->nameStudent;
		}
		
	}
	
	class PrimarySchool 
	{
		public function __construct($x) {
			$this->numberTeachers = $x;
		}
		
		public function getInformation() {
			echo $this->numberTeachers." ";
		}
		
		public function countAll() {
			echo $this->numberTeachers;
		}
		
		public function countAllOfClass(School $count) {
			echo $count->nameStudent;			
		}
	}
	
	
	$variable = new School(14,221,"Ludwik Armma", "Bartlomiej Ff");
	$variable->getInformation();
	$variable->countAll();
	
	echo "<br /><br /><br />";
	
	$zmienna = new PrimarySchool(14);
	$zmienna->getInformation();
	$zmienna->countAll();
	$zmienna->countAllOfClass($variable);
	
	
	

Może mi ktoś to wytłumaczyć jak to działa?, dziękuje bardzo :))

2 odpowiedzi

–1 głos
odpowiedź 28 maja 2017 przez Chess Szeryf (76,710 p.)
edycja 29 maja 2017 przez Chess
 
Najlepsza

Konstruktor zaczyna działać po zdefiniowaniu $zmiennej i przypisaniu po znaku równa się do niej słówkiem new nazwę klasy. Innymi słowy jest wywoływany odpowiednio w momencie tworzenia obiektu, a destruktor w momencie niszczenia obiektu.

 $variable = new School(14,221,"Ludwik Armma", "Bartlomiej Ff");

Linia powyższa wywołuje aż 4 zmienne (wartości).

Za każdym razem, gdy przypiszesz do klasy nową zmienną to wywołujesz konstruktor, który wywołuje te zmienne, czyli te parametry, które masz w __contruct. Później przekazałaś te zmienne do funkcji getInformation(), z której z kolei pobierasz dane i je wyświetlasz tą linijką:

$variable->getInformation();

 

komentarz 28 maja 2017 przez Justyna Obywatel (1,210 p.)
Okej to po co w takim przypadku jest deklarowanie zmiennych w klasie?:

            public $numberTeachers;
            public $numberStudents;
            public $nameDyrektor;
            public $nameStudent;
            public $nameStudent2;

Ze wzgl na modyfikatory dostepu ? czy mozliwosc pozniej w dziedziczeniu ich, udostepnienia w klasie ktora np nie ma konstruktora?
komentarz 28 maja 2017 przez Chess Szeryf (76,710 p.)

Jak mniej więcej działa __construct.

class TestConstructora{
 
	public function __construct($color){
		 echo $color.'<br />';
	}
	public $jaki = null;
	public function jaki_owoc($jaki) {
		 echo $jaki;
	}
}

$variable = new TestConstructora(77);
$variable2 = new TestConstructora(3);
$variable3 = new TestConstructora(4);
$variable4 = new TestConstructora(5);
$variable4->jaki_owoc('strawberry');

Jeśli zmienna jest w funkcji to nie trzeba jej deklarować chyba. Deklarując zmienne w klasie określasz ich status, czy są: public, private czy protected. Tak samo po co pisać np.:

int $variablex, string $variabley, float $variablep, itd... Tylko po to, żebyśmy lepiej widzieli, co jest typu int, co string, a co float itp. Jeszcze po to się definiuje zmienne, żeby dobrać się do nich za pomocą słówka kluczowego $this.

 

komentarz 28 maja 2017 przez Justyna Obywatel (1,210 p.)
Ale na ogól trzymać sie tej teorii by wypisywać zmienne które dotyczą całej klasy nie? :P
komentarz 28 maja 2017 przez Chess Szeryf (76,710 p.)

Zdania są podzielone, ponieważ jeśli nie zadeklarujesz zmiennej to w domyśle interpretera PHP jest ona jako public. Aczkolwiek moim zdaniem lepiej jest jeśli zainicjalizujesz zmienną od razu, ponieważ można wtedy szybciej zobaczyć jakiego jest typu, a nie szukać po całym skrypcie i się domyślać, czy czasem to nie jest przypadkiem ustawione na private, czy protected.

komentarz 29 maja 2017 przez efiku Szeryf (75,160 p.)
edycja 29 maja 2017 przez efiku

Justyna, sugeruję uważać na odpowiedzi tego osobnika i sama zacząć się uczyć, bo możesz się głupot nauczyć, a potem płakać, że jednak to było inaczej... ;)

int $variablexstring $variableyfloat $variablep, itd... Tylko po to, żebyśmy lepiej widzieli, co jest typu int, co string, a co float itp. Jeszcze po to się definiuje zmienne, żeby dobrać się do nich za pomocą słówka kluczowego $this.

Guzik prawda. Należy obecnie pisząc w php7 tak robić. Nie tylko, abyśmy sami widzieli, ale żeby interpreter miał lżej. Włączając strict mode, otrzymujemy wyjątek, w przypadku gdy chcemy do zmiennej typu int wrzucić stringa. Zwalnia nas to też z jakiś dodatkowych sprawdzań typu is_numeric.

Dałem Ci linka: https://webmastah.pl/jak-programowac-obiektowo-cz-1-wstep/ na którego nawet nie raczyłaś spojrzeć. Jak chcesz być freelancerem, to proszę bardzo, ale jak chcesz być programistką, to poczytaj dobre źródła wiedzy, które podrzucają Ci ludzie bardziej doświadczeni.  

 

Ale na ogól trzymać sie tej teorii by wypisywać zmienne które dotyczą całej klasy nie? :P

Zależy. Zazwyczaj klasy mają prywatne properties, ponieważ w  grę wchodzi enkapsulacja. Przy czymś bardziej rozbudowanym tworzysz interfejs najważniejszych metod, potem implementujesz go w swojej klasie, a zmienne zazwyczaj są prywatne. 

 

 

Jeśli zmienna jest w funkcji to nie trzeba jej deklarować chyba. Deklarując zmienne w klasie

To chyba, czy na pewno?  ;)

bo:

<?php

public function doSomething() : string {
   return $variable;
}

 

To nie to samo co:

<?php

public function doSomething() : string {
   return $this->variable;
}

 

0 głosów
odpowiedź 28 maja 2017 przez Boshi VIP (100,240 p.)
Dynamicznie tworzysz pole.
komentarz 28 maja 2017 przez Justyna Obywatel (1,210 p.)
A tak w paru zdaniach? Tzn?
1
komentarz 29 maja 2017 przez efiku Szeryf (75,160 p.)
Chodzi mu o przeciążenie magicznej metody __set. Sugeruje uważać.

Podobne pytania

–1 głos
2 odpowiedzi 525 wizyt
pytanie zadane 5 maja 2018 w PHP przez Q7V Gaduła (4,250 p.)
0 głosów
1 odpowiedź 213 wizyt
pytanie zadane 29 maja 2017 w PHP przez Justyna Obywatel (1,210 p.)
0 głosów
1 odpowiedź 247 wizyt
pytanie zadane 24 maja 2017 w PHP przez Justyna Obywatel (1,210 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...