24

I'm writing a small library in PHP and i'm having some problems with built-in classes not being read. For example:

namespace Woody;

class Test {
  public function __construct() {
    $db = new PDO(params);
  }
}

This gives me:

PHP Fatal error: Class 'Woody\PDO' not found in /var/www/test.php

1

3 Answers 3

38

This:

namespace Woody;
use PDO;

Or:

$db = new \PDO(params);

Point in case is, that the class PDO is not a full qualified name within your Namespace, so PHP would look for Woody\PDO which is not available.

See Name resolution rulesDocs for a detailed description how class names are resolved to a Fully qualified name.

Sign up to request clarification or add additional context in comments.

3 Comments

thanks for a better answer than my own. I knew the solution, but I didn't explain it nearly as well as you did!
The \PDO method doesn't work for me in PHP 5.5.12, but this does: use PDO;.
@tastro: I think as well that using use is good practice. Then you can see at the top of the file which classes are taken in.
6

Add a backslash before class name, ie

$db = new \PDO(params);

Comments

3

The below should work:

namespace Woody;

class Test {
    public function __construct() {
        $db = new \PDO(params);
    }
}

You need to prefix PDO with the backslash so PHP knows it's in the global namespace.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.