Gå til innhold

PHP·pub - Programming With Attitude - and beer


Anbefalte innlegg

  • 4 uker senere...
Videoannonse
Annonse

Hvis du har lyst til å drive med ordentlig systemutvikling i PHP, så foreslår jeg at du begynner å lese deg opp på arkitekturer i første omgang. Det vist i videoen er ikke "advanced" for fem jævla flate øre. Det er et klassisk eksempel på The Retard Way of OOP™. Vedkommende har tatt kode han er vandt med å skrive og bare innkapslet den i en klasse. Kraften i objekter blir ikke utnyttet på noen som helst måte og koden er like lite dynamisk som den var uten dem.

 

Litt overdreven bruk av $this vel?

Eh, hva slags antall «$this» mener du en kode bør inneholde?

Endret av Jonas
Lenke til kommentar

99/100 «tutorials» om OOP i PHP som ligger på nettet viser det Jonas så fint kaller «The Retard Way of OOP™». Jeg foreslår heller at man leser seg opp på ulike design patterns og litt grunnleggende objektorientert teori. Patterns of Enterprise Application Architecture er en god bok om emnet. Et stikkord jeg vil nevne når det gjelder organisering av kode i alle prosjekter, små som store, er MVC, hvor man deler inn koden i ulike logiske enheter. Det hjelper selvsagt ikke å lese seg i hjel, og da kan det være et smart trekk å studere hvordan f.eks. Ruby On Rails gjør ting. Ting du plukker opp her kan enkelt overføres tilbake til PHP, dersom det skulle bli aktuelt å gå tilbake. Ellers har jo PHP enkelte rammeverk du kan se på: Lithium og Symfony 2 for å få en idé om hvordan du kan ta i bruk OOP i egne prosjekter.

Lenke til kommentar

Det er et klassisk eksempel på The Retard Way of OOP™.

 

Du sier akkurat det du mener, som vanlig, ja :D

Genialt ^^

 

 

Men ja, jeg syns jo selv det var en pussig måte å gjøre ting på i den YouTube-videoen.

Ser for meg vitsen med mange instanser av den klassen, ja ^^

 

But then again, PHP støtter ikke statiske klasser eller namespaces (såvidt meg bekjent), så det er jo én måte å gjøre det på organisere kode på ...

Dog ikke "avansert OOP" akkurat, slik han hevder ...

Endret av ze5400
Lenke til kommentar

Både statiske klasser og namespaces er støttet i PHP.

 

 

Ah, fantastich! Skriver ikke stort PHP så ante faktisk ikke det.

 

Men er du sikker på at PHP støtter statiske klasser?

Jeg vet det støtter klasser med bare statiske medlemmer, men jeg tror ikke man kan deklarere selve klassen som static. Ikke det at det har så forbannet mye å si om man har en static klasse eller en klasse med bare statiske medlemmer, dog ...

Lenke til kommentar

Hjelp meg å tenke :p

Skal slenge inn fødselsdatoen i databasen. Der har jeg egen dato kolonne som er formatert som dato altså (0000-00-00)

 

Så siden jeg må ha inn 3 verdier fra registreringsskjemaet inn i en kolonne så tenkte jeg å sette det opp slik

 

$dateofbirth = $_POST['year,month,day'];

 

og deretter inserte variabelen $dateofbirth i databasen. Men ingenting blir sendt til databasen.

Jeg gjør sikkert noe feil med variabelen ovenfor. Kan man gjøre slikt ? For jeg har 3 select name med year, month og day.

Endret av Avean
Lenke til kommentar

Nå leter scriptet ditt etter $_POST-variabelen "year,month,date", og denn finnes da ikke. $_POST['year'], $_POST['month'] og $_POST['day'] finnes kanskje =)

 

Snodig vil fortsatt ikke skrive inn datoen.

Jeg prøvde 2 måter. Først som ovenfor.

 

$date = $_POST['year'] . $_POST['month'] . $_POST['day'];

 

Det funket ikke

Så delte jeg de opp i variabler. Altså $year = $_POST'year'] og deretter kombinerte alle de variablene i $date og så inserta $date i databasen men står fortsatt 0000.00.00 der. Er ikke begge måtene her riktig egentlig?

Lenke til kommentar

Hvordan ville dere gjort det med klasser om man skal sette opp et raskt og fleksibelt brukersystem?

Brukersystemet skal ha et template-system også.

 

Jeg tenker noe sånt:

class SQL

class User

 

Dette er hva jeg har til nå:

 

User

 

class User {

	private $db;

	public function __construct($db) {
		if(is_object($db)) {
			$this->db = $db;
		}
		else {
			throw new Exception('Kunne ikke hente databasetilkoblingen!');
		}
	}

	public function test() {
		$sql = $this->db->query('SELECT * FROM tabell');
		foreach($sql as $row) {
			echo $row['id'] . '<br>';
		}
	}

}

 

 

SQL

 

interface Interface_DB {
	public function connect();
	public function setDbHost($host);
	public function setDbUser($user);
	public function setDbPass($pass);
	public function setDbName($dbnm);
}

class SQL implements Interface_DB {

	protected $instance = NULL;
	private $db_host;
	private $db_user;
	private $db_pass;
	private $db_database;

	public function connect() {
		if(!isset($this->instance)) {
			try {
				$this->instance = new PDO('mysql:host=' . $this->db_host . ';dbname=' . $this->db_database, $this->db_user, $this->db_pass);
				$this->instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
				$this->instance->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
			}
			catch(Exception $e) {
				die('Kunne ikke koble til databasen!');
			}
		}
		return $this->instance;
	}

	protected function __clone() {
	}

	public function setDbHost($host) {
		$this->db_host = $host;
		return $this;
	}

	public function setDbUser($user) {
		$this->db_user = $user;
		return $this;
	}

	public function setDbPass($pass) {
		$this->db_pass = $pass;
		return $this;
	}

	public function setDbName($dbnm) {
		$this->db_database = $dbnm;
		return $this;
	}

}

}

 

 

	$dbSettings = new SQL;
$dbSettings -> setDbHost(DB_HOST)
						-> setDbUser(DB_USER)
						-> setDbPass(DB_PASS)
						-> setDbName(DB_DB);

$dbResource = $dbSettings->connect();

$user = new User($dbResource);
$user->test();

 

Hva tenker dere om en slik "løsning"?

Trenger noen tips og ide'er hvordan jeg skal gjøre det med brukerfunksjon også videre.

Skal jeg lagre brukerinnformasjon i variabler i klassen User?

Endret av Thomas.
Lenke til kommentar

Det var jo ikke allverdens kode å kommentere på. Dog det er noen designfeil.

 

Hva er poenget med å returnere $this i alle de funksjonene? Det er iallfall ikke særlig pent. Dessuten, når har du behov for å endre host, brukernavn, passord og database midt inni eksekveringen (selv om det slik det er satt opp er helt umulig)? Er det ikke bedre med flere instanser av klassen og la disse innstillingene bli satt i constructor i stedet?

 

Ja, og hva i alle dager er forresten poenget med å ha den SQL-klassen når du uansett ser ut til å bruke PDO? Hvorfor ikke bare bruke PDO? Hvor ligger fordelen i å ha det slik det er nå kontra å opprette PDO-objekter «selv» utenfor?

Lenke til kommentar

Hva er poenget med å returnere $this i alle de funksjonene? Det er iallfall ikke særlig pent. Dessuten, når har du behov for å endre host, brukernavn, passord og database midt inni eksekveringen (selv om det slik det er satt opp er helt umulig)?

Nei må jo ikke det, men så på en tutorial: http://www.talkphp.c...d-chaining.html

 

 

Er det ikke bedre med flere instanser av klassen og la disse innstillingene bli satt i constructor i stedet?

Kan du gi et lite eksempel her? :)

Noe ala denne metoden? http://www.phpriot.c...ith-spl-php-5/4

 

 

Ja, og hva i alle dager er forresten poenget med å ha den SQL-klassen når du uansett ser ut til å bruke PDO? Hvorfor ikke bare bruke PDO? Hvor ligger fordelen i å ha det slik det er nå kontra å opprette PDO-objekter «selv» utenfor?

Nei, si det :D

Er det ikke noen fordeler og benytte "singleton" med PDO? (vet at jeg ikke bruker det her)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...