Jeg bryder mig ikke synderligt meget om idéen om at lægge andet end initialiseringer ind i __construct().
En __construct() kan hurtig blive uoverskuelig hvis laver mysql forbindelser, curl forbindelser, åbne konfigurationsfiler og så videre i den. Min holdning er at man laver nogle seperate funktioner som giver det naturlige overblik over det skal ske ved instantiering af objektet.
Udover det vil det også være ønskeligt hvis du fokuserede mere på hvordan mysqli arbejder frem for mysql, Der er nogle ret store forskelle i måden at arbejde med det på, så bare det at kigge på dokumentationen for mysqli ville have løst nogle af de problemer du har skabt for dig selv.
MEn her er mit forslag (utestet) til en kode som kunne give dig det du har behov for.
<?php /* START */
class blog
{
private $mysqli = null;
public $error = null;
public function __construct()
{
$this->mysqli_connect();
}
private function mysqli_connect()
{
$this->mysqli = new mysqli('localhost', 'user', 'pass', 'database');
}
public function getPosts()
{
$this->connect();
$sql = "SELECT * FROM posts";
$query = $this->mysqli->query();
if( !$query ) // hvis sql fejler
{
$this->error = $this->mysqli->error);
return false;
}
if($query->num_rows == 0)
return array(); // returner et tomt array istedet for at køre mere kode
return $query->fetch_all(MYSQLI_ASSOC);
}
}
$blog = new blog();
$posts = $blog->getPosts();
if( !$blog )
{
echo "Der skete desværre en databasefejl - vi arbejder på at løse problemet";
mail("dig_selv@example.org", "Fejl fra ".__FILE__, "SQL sagde:\n".$blog->error); // Send en mail til dig selv med fejlen eller gem det i en logfil
}
else
{
echo "<h1>Results</h1>";
if( count($posts) == 0 )
"Der er ikke nogen indlæg";
else
{
foreach($posts as $post)
{
echo $post["overskrift"];
//bla blah
}
}
}
/* END */ ?>