PHP and Objects and me

Is PHP really object-oriented?
A semi-stimulating discussion.
So does "Object-Oriented PHP" just mean Classes?
The manual seems to reinforce that concept.
Here's a typically confusing exchange on the subject.
A simple tutorial with an illustration of the distinction between Classes and Objects:
The manual includes only a brief nod to the existence of stdClass: "Created by typecasting to object". Here's a simple example from a tutorial on uses for stdClass:
$object = new StdClass;
$object->foo = 'bar';
Objects, arrays, json_encode() and json_decode()
Despite lots of discussion, as far as I can tell there's no consistent performance difference between using PHP arrays or stdClass objects.
I often like to use stdClass objects instead of arrays, especially when I'm planning to convert to JSON.
(For one thing, I'd much rather type $user->name than $user["name"] all day.)
But in my experience, the useful PHP functions json_encode and json_decode are slightly buggy and not totally compatible with javaScript. (I have little nightmares about single quotes.)
The good news is, json_encode works the same way with PHP arrays and objects.
PHP objects and MySQL
while ($row = mysql_fetch_array($result)) {
    echo $row[0];
    echo $row[1] ;

while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];

while ($row = mysql_fetch_object($result)) {
    echo $row->user_id;
    echo $row->fullname;
A tutorial for transitioning from old-school MySQL:
A brief summary
A pretty sophisticated tutorial
More of a cookbook:
$dbh = new PDO("mysql:host=localhost;dbname=test", "testuser", "testpass");

$dbh->exec ("CREATE TABLE animal (name CHAR(40), category CHAR(40))");

$dbh->exec ("INSERT INTO animal (name, category)
                           ('snake', 'reptile'),
                           ('frog', 'amphibian'),
                           ('tuna', 'fish'),
                           ('racoon', 'mammal')");

$sth = $dbh->query ("SELECT name, category FROM animal");

while ($row = $sth->fetch (PDO::FETCH_OBJ))
     printf ("Name: %s, Category: %s\n", $row->name, $row->category);

$dbh = NULL; // closes connection
Binding data for security: PDO handles all quoting and escaping.
   $sth = $dbh->prepare ("INSERT INTO animal (name, category)
                          VALUES (:name, :cat)");
   $sth->bindValue (":name", "ant");
   $sth->bindValue (":cat", "insect");
   $sth->execute ();

   // or pass values directly to execute() using an array:

   $sth->execute (array (":name" => "black widow", ":cat" => "spider"));
One of the coolest things I just learned about PDO from the tutsplus tutorial: FETCH_CLASS will update properties of an existing class. THEN call the constructor. So your class can modify the returned values. (I can't wait to find a reason to try that out.)