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

Sprawdzenie poprawnosci kodu

Object Storage Arubacloud
0 głosów
462 wizyt
pytanie zadane 4 marca 2017 w PHP przez Marchiew Dyskutant (7,690 p.)

Witam,

Czy ktoś siedzący na co dzień w programowaniu obiektowym, mógłby sprawdzić mój kod pod kątem czytelności, poprawnych typów zmiennych, logikę kodu. Coś zmienić, poprawić, usunąć, unikać, stosować na przyszłość?

Pierwszy raz napisałem coś obiektowo i dlatego chce się zwrócić do nas po wasze zdanie.

Z góry dzięki

<?php

class Connect{
	private $host = "localhost";
	private $dbname = "obiektowosc";
	private $root = "root";
	private $password = "";
	
	protected $connect;
	
	public function __construct(){}
	
	protected function Connect(){
		try{
			$this -> connect = new PDO("mysql:host=".$this -> host.";dbname=".$this -> dbname, $this -> root, $this -> password);
			$this -> connect -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		}
		catch(PDOException $e){
			echo "błąd połączenia z bazą: ". $e -> getMessage();
		}
	}
}

class AddPerson extends Connect{
	private $name;
	private $surname;
	private $age;
	
	public function __construct($name, $surname, $age){
		parent::__construct();
		parent::Connect();
		
		$this -> name = trim($name);
		$this -> surname = trim($surname);
		$this -> age = trim($age);
	}
	
	function AddInformation(){
		try{
			$addInformation = "
				INSERT INTO informacje (id, imie, nazwisko, wiek)
				VALUES (null, :name, :surname, :age)";
		
			$bind = $this -> connect -> prepare($addInformation);
			$bind -> bindValue(':name', $this -> name, PDO::PARAM_STR);
			$bind -> bindValue(':surname', $this -> surname, PDO::PARAM_STR);
			$bind -> bindValue(':age', $this -> age, PDO::PARAM_INT);
			$bind -> execute();
			
			$bind = null;
			
			header("Location: ".$_SERVER["REQUEST_URI"]);
		}
		catch(PDOException $e){
			echo "błąd dodania do bazy: ".$e -> getMessage();
		}
	}
}

class ShowPersons extends Connect{
	private $person = [];
	
	public function __construct(){
		parent::__construct();
		parent::Connect();
	}
	
	function ShowInformation(){
		try{
			$viewPersons = "SELECT * FROM informacje";
			
			foreach($this -> connect -> query($viewPersons) as $index => $value){
				$this -> person[$index] = $value;
			}
			
			$this -> connect = null;

			return $this -> person;
		}
		catch(PDOException $e){
			echo "nie można wyświetlić informacji: ". $e -> getMessage();
		}
	}
}

if(!empty($_POST["imie"]) && !empty($_POST["nazwisko"]) && !empty($_POST["wiek"])){
	
	$add_person = new AddPerson($_POST["imie"], $_POST["nazwisko"], $_POST["wiek"]);
	$add_person -> AddInformation();
}

?>
<!doctype html>
<html>
	<head>
		<title>Obiektowość</title>
		<meta charset="utf-8">
		<link rel="stylesheet" type="text/css" href="style.css">
	</head>
	<body>
		<form method="post">
			<label>Imię: <input type="text" name="imie" /></label>
			<label>Nazwisko: <input type="text" name="nazwisko" /></label>
			<label>Wiek: <input type="text" name="wiek" /></label>
			<input type="submit" value="dodaj" />
		</form>
		
		<table>
		<?php
			$view_persons = new ShowPersons();
			$view_persons = $view_persons -> ShowInformation();
			
			foreach($view_persons as $row){
		?>
		
			<tr>
				<td><?php echo $row["id"]; ?></td>
				<td><?php echo $row["imie"]; ?></td>
				<td><?php echo $row["nazwisko"]; ?></td>
				<td><?php echo $row["wiek"]; ?></td>
			</tr>
		<?php } ?>
		
		</table>
	</body>
</html>

Jakby co to moge przesłać jakoś plik txt dla ułatwienia.

2 odpowiedzi

+1 głos
odpowiedź 4 marca 2017 przez Boshi VIP (100,240 p.)
Ten kod  jest bezsensu.. klasy add i show to powinny być metody. Nie wiem po co rozszerzasz też klasę connect, co ona ma wspólnego z klasami person? poczytaj o DI, ponadto sama idea klasy connect w takim stanie jakim jest obecnie jest bezsensu. Nie ma żadnych pomocnych właściwości. Niech ona posiada metody typu fetchAll itd.
komentarz 4 marca 2017 przez Marchiew Dyskutant (7,690 p.)
Jak wspomniałem: pierwszy raz napisałem coś obiektowo :)

1. Czyli w klasie Person powinna być metoda AddPerson i ShowPerson, dobrze rozumiem?
2. Rozszerzam je o klase Connect żeby miałby dostęp do bazy która tam siedzi.
3. Jak powinna wyglądać w takim razie klasa Connect i o jakie pomocne właściwości chodzi?
4. Jak zastosować fetchAll itp?
5. co to jest Dl?
komentarz 4 marca 2017 przez Boshi VIP (100,240 p.)
A jaki jest cel tego kodu ?
komentarz 4 marca 2017 przez Marchiew Dyskutant (7,690 p.)
Zwykłe ćwiczenie na rozwinięcie umiejętności. formularz wymyślony na szybko.

Ale chciałbym, żeby to był szablon na przyszłość, więc fajnie by było jakby był w pełni poprawny
komentarz 4 marca 2017 przez Boshi VIP (100,240 p.)
Rozdziel całkowicie bazę danych od kodu

zastanów się czy klasa connect jest ci do czegoś potrzebna?

DI to wstrzykiwanie zależności. Np przekazujesz przez konstruktor wybrany obiekt

Generalnie jest dużo podejść do takich problemów. Jedne proste, drugie skomplikowane za ukryte za kilkoma warstwami abstrakcji ( ładny kod)

Możesz stworzyć klasę person/user  (user to lepsza nazwa), przetrzymująca tylko właściwości oraz wymagane metody dostępu. A potem stowrzyć coś na wzór serwisu zarządzającego tą klasą, po przez np aktualizację danych, usunięcie użytkownika, czy utworzenie go (tutaj polecam wzór fabryki albo fabryki abstrakcyjnej do wytwarzania obiektów na podstawie surowców (danych))
0 głosów
odpowiedź 4 marca 2017 przez Rafał Banaszkiewicz Obywatel (1,110 p.)
hmmm kod jest czytelny jak najbardziej, ale ja bym zrobił jedna klasę person i kolejna klasę do obsługi zapisywania i wyjmowania persona z DB tak jak to robi "Doctrine" bardzo przyjemny dodatek do php który "zrzuca" wiersze z bazy danych do obiektów;

Podobne pytania

0 głosów
0 odpowiedzi 150 wizyt
+1 głos
0 odpowiedzi 109 wizyt
0 głosów
2 odpowiedzi 871 wizyt
pytanie zadane 26 sierpnia 2017 w C i C++ przez minemoney Nowicjusz (240 p.)

92,566 zapytań

141,420 odpowiedzi

319,615 komentarzy

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

...