Website Class

#0 :: 22.01.2011 - 15:43
  • GameOver
  • User

Hallo erstmal

Habe mir ein mini CMS geschrieben, so dass man grad mal den Inhalt ändern kann - allerdings alles in Prozeduralen Code und da kommt ganz schön was zusammen. Jetzt will ich es Stück für Stück in OOP umsetzen, anfangen möchte ich mir der Ausgabe des Contents, aber schon nach 10 Minuten geht nichts mehr weiter :-/

Da ich mich noch nie so wirklich mit oop beschäftigt habe, geh ich das ganze relativ langsam an, der unten stehende Code ist also teilweise auch nur ein Testcode, um zu sehen, wie Was funktioniert.

<?php
class Website
{
//Attribute
private $page;
private $pageExist;
//Constructer
public function __construct($page)
{
$this->page = htmlspecialchars($page);
}
//gibt es die Page?
private function checkPage()
{
$allPages = array("home", "aboutme", "projects", "contact");
if(in_array($this->page, $allPages))
{
$this->pageExist = true;
}
}

public function printPage()

{
if($this->pageExist == true)
{
echo $this->page;
}
else
{
echo 'Seite existiert nicht.';
}
}
}
?>

Objekt dieser Klasse erzeuge ich in der index.php:

<?php
include_once("classes/class.Website.php");
$website = new Website($_GET['page']);
$website->checkPage();
$website->printPage();
?>

Das Problem liegt an der dritten Methode - als ich diese hinzugefügt habe, erhielt ich keine Ausgabe mehr.

Die checkPage Methode arbeitet erstmal nur mit in_array.
In meinem Mini CMS habe ich alle Seiten der Website in eine eigenen Datenbank Tabelle gestellt - später ist geplant, mittels der Methode checkPage diese Tabelle nach dem Objekt Attribut $page zu durchsuchen - damit wäre das dynamischer/flexibler als in_array.

Naja, nur häng ich jetzt schon bei diesem Problem fest.

gruß Nico

MC-Web

#1 :: 22.01.2011 - 16:01
  • GameOver
  • User

Ok, den Fehler habe ich nun gefunden: die checkPage Methode habe ich auf private gestellt, daher kam es wohl zu keiner Ausgabe.
Wobei das Ganze jetzt noch verwirrender ist. In nem PHP 5.3 Handbuch steht folgendes:

private: Das Element kann nur von Objekten der eigenen Klasse verändert werden

Als Element ist da ja ein Attribut gemeint!?
Ich verstehe jetzt einfach nicht, wieso ich checkPage als public definieren muss? Müsste private laut dem oben stehenden Zitat nicht funktionieren?

MC-Web