Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

PHP Objektorienterat...

Tråden skapades och har fått 5 svar. Det senaste inlägget skrevs .
1

Jag har utvecklat en hel del saker med php och kört det objektorienterat. Så mycket det går med php vill säga.
Att i det längsta skilja på koden och html.

Nu var det ett tag sedan (nära 1 1/2 år) och jag har liksom glömt det allra enklaste.
Här har ni de tre dokumenten jag jobbar med och inte får att fungera:

index.php - som anropar de andra dokumenten med require_once.

<?
require_once("obj/dbconnect.inc");

require_once("obj/users.inc");

$mainUsers = new users();
?>
sidan
<?
include("inc/usersContent.inc");
?>

dbconnect innehåller bara uppkopplingen mot databasen den funkar.

obj/users.inc

<?
class users
{

function getAllUsers()
{
$getAllUsersQuery = 
"SELECT name, email 
FROM users 
ORDER BY id";

$getAllUsersResult = mysql_query($getAllUsersQuery) 
or die (mysql_error()."<br>".$getAllUsersQuery);

while(list($name, $email) = mysql_fetch_row($getAllUsersResult))
{
$getAllUsersArray[] = array($name, $email);
}
return $getAllUsersArray[];
}

}
?>

Som ni ser i index filen så skapar jag en instans av denna klass.

Sedan kommer vi då till själva HTML filen.
Till och börja med anropar jag instansen för att utföra funktionen, sedan läser jag av den array som retuneras.

<?
$allUsersArray = $mainUsers->getAllUsers();
	
while(list($temp,$tempList) = each($allUsersArray))
{
list($name, $email) = $tempList;
echo '<a href="mailto:'.$email.'">'.$name.'</a><br>';
}
?>

Problemet jag har nu trots att verkar se rätt ut är att jag får en blank sida. Inget resultat alls.
Inga error, nothing.

Sidan som visas är helt blank ingen som helst kod.

Var ligger felet? Nåt ; som saknas säkert som jag inte kan se. Eller nån felstavning...

Nån som kan hjälpa mig?

Senast redigerat 2003-07-21 15:17

Felet verkar ligga i obj/users.inc...
Letar vidare.

Ingen som kan hjälpa mig?

Det löste sig.
Ett litet stavfel.

suck.

För att göra det än mer objektorienterat kanske du ska skapa objekt för det som lagras i databasen också. Typ User skulle kunna vara en klass som beskriver en användare med medlemsvariabler som tex. id, namn, lösenord osv. Det är ganska smidigt att göra så i kombination med att använda templates. Då kan man sätta användaren, som ska visas på sidan, till något som du får från databasen och sedan i template-filen välja hur du ska presentera användaeren genom att visa $user->name osv.

En jäkligt schysst "template-motor" är att använda php självt för sina templates. Beskrivning hur man gör finns här men observera att koden på sidan innehåller lite buggar men de hittar och rättar du nog själv ganska snabbt.

I allmänhet så är det en bra idé att skilja logik och presentation, det blir grymt mycket lättare att debugga för att koden blir så mycket "renare", man ser flödet i koden mycket tydligare eftersom man slipper all html.

Om du kommer på ett bra sätt att använda templates för formulär med validering och felmeddelanden som ska vara lätt att underhålla på flera språk så kan du säga till

ok, nu när vi ändå snackar om OOP (vilket jag precis börjat kika på på riktigt i php) så har jag lite frågor..

vad, mer exakt, är en "statiskt" klass (static class)? altså när skall man använda $class->doStuff() jämnfört med $class::doStuff() (static)..?

eller har jag fattat helt fel?

Jag är ingen häxmästare på Object Orienterad PHP just, men Statiska klasser som OOP begrepp använder man sig typiskt av för att skapa Design Pattern "Singelton". En klass som finns i endast en instans och globalt tillgänglig i din kod.

Tänk dig att du vill implementera en debuglog i ditt system. Detta skulle du på ett bra sätt kapsla in i en statisk klass, t ex.

1
Bevaka tråden