2013-03-17 97 views
0

我正在尝试使用类和PHP:PDO。我已经建立了一个简单的类来尝试一些东西,但我得到一个错误“Undefined variable:conn”错误。在PHP中将属性从一种方法传递给另一种方法

class Cms { 

    function __construct() { 
     try { 
      $conn = new PDO('mysql:host=localhost;dbname=blog', 'root', ''); 
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch(PDOException $error) { 
      echo 'error: ' . $error->getMessage(); 
     } 
    } 

    public function read() { 
     $query = $conn->query("SELECT * FROM posts"); 
    } 
} 

据我所知,这可能是因为$ conn PDO对象没有被传递给read方法,因为它是在构造方法中设置的。 什么是让read方法能够使用$ conn属性的最佳方法?

回答

5
class Cms { 

    private $_conn; 

    function __construct() { 
     try { 
      $this->_conn = new PDO('mysql:host=localhost;dbname=blog', 'root', ''); 
      $this->_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } catch(PDOException $error) { 
      echo 'error: ' . $error->getMessage(); 
     } 
    } 

    public function read() { 
     $query = $this->_conn->query("SELECT * FROM posts"); 
    } 
} 

因此,您创建一个私有财产,你的PDO实例分配给它,并使用

有些文档:http://www.php.net/manual/en/language.oop5.properties.php

+0

,虽然工作,夫妇的问题。 1.这是否被认为是最佳做法? 2.为什么使用私人? 我对可见性还不是很熟悉,这是一个例子:“当我不在课堂上使用$ conn属性时,可能会使它变得私密?”。 – 2013-03-17 20:30:25

+0

@Stephan de Vries:1. yep 2.因为您不希望未经您的许可更改您的课程资料 – zerkms 2013-03-17 21:10:25

相关问题