2011-09-02 6 views
7

बहुत छोटा सवाल, यहां एक उदाहरण है:PHP पीडीओ: निजी ऑब्जेक्ट गुणों में लाने के लिए fetch शैलियों FETCH_CLASS और FETCH_INTO लाने के लिए?

$prepared = $this->pdo->prepare("SELECT * FROM Users WHERE ID = :ID"); 
$statement = $prepared->execute(array(":ID" => $User_ID)) 
$result = $statement->fetchAll(PDO::FETCH_CLASS, "User"); 
//OR 
$User = new User(); 
$result = $statement->fetch(PDO::FETCH_INTO, $User); 

(सिर के शीर्ष से लिखा गया है, सिंटैक्स त्रुटियों में हो सकता है)

उन दोनों को सीधे ऑब्जेक्ट्स के निजी गुणों में लाएं? मैंने पढ़ा है कि यह __construct फ़ंक्शन को भी रोकता है, तो क्या यह निजी स्थिति को भी बाधित करेगा?

उत्तर

7

बहुत छोटा जवाब: हाँ यह होगा।

class Foo 
{ 
    private $id; 
    public function echoID() 
    { 
     echo $this->id; 
    } 
} 
$result = $statement->fetchAll(PDO::FETCH_CLASS, "Foo"); 
$result[0]->echoID(); // your ID 

एक तरफ:

यह होगा वाक्यविन्यास त्रुटियों $statement->fetchAll(PDO::FETCH_INTO, $User); कारण। आप विधि के साथ FETCH_INTO का उपयोग नहीं कर सकते।

+1

आह, ठीक है ... के बाद से fetchAll एक से अधिक वस्तु बनाना चाहता है यह काम कभी नहीं होगा। मैं समझ गया! – sinni800

+0

कक्षाओं को बनाने में कोई समस्या नहीं होगी, यह FETCH_INTO है जो काम नहीं करेगा क्योंकि आप केवल एक ऑब्जेक्ट को पैरामीटर के रूप में भेज सकते हैं। –

+0

@ वेस्लेय मैं यही कर रहा था। मैं केवल इसे एक उदाहरण देता हूं इसलिए यह काम नहीं करता है। – sinni800

1

लेकिन पीडीओ :: FETCH_CLASS के साथ घटना उप-वर्गों के लिए निजी गुणों के लिए एक समस्या है। ईजी।

class Animal 
{ 
    private $color; 
    public function getColor() 
    { 
     return $this->color; 
    } 
} 
class Cat extends Animal 
{ 
} 

$statement->setFetchMode(PDO::FETCH_CLASS, "Cat"); 
$someCat = $statement->fetch(); 

echo $someCat->getColor(); //empty 
print_r($someCat); 
/* 
now have strange output like: 
[color:Animal:private] => 
[color] => grey 
*/ 

लेकिन अगर आप संरक्षित के गुण सेट - यह ठीक

+1

* निजी * गुण केवल कक्षा के हैं और उप-वर्गों द्वारा विरासत में नहीं मिल सकते हैं। – crodas

0

कारण काम करता है आप एक सुपर वर्ग पर निजी संपत्तियों तक नहीं पहुँच सकता है, क्योंकि उन गुणों दायरे से बाहर हैं। Subclasses चर और कार्यों सहित, उनके मूल वर्गों के निजी विशेषताओं पर नहीं लेते हैं।

संपादित करें: अपने प्रश्न को स्पष्ट करने के लिए धन्यवाद लेकिन यह मेरा जवाब यहां थोड़ा हास्यास्पद दिखता है। : P

0

आप की कोशिश कर सकते:

class Foo { 
    private $id; 
    public function __set($prop, $val) { 
     $this->$prop = $val; 
    } 
    public function __get($prop) { 
     return $this->$prop; 
    } 
} 

$result = $statement->fetchAll(PDO::FETCH_CLASS, "Foo"); 
$result[0]->id(); 
संबंधित मुद्दे