मैं PHP OOP के बारे में अधिक जानने की तलाश में एक नौसिखिया हूं, इसलिए ऐसी चीजें हैं जो मुझे नहीं पता हैं, ShowUsers()
विधि में, मैं डेटाबेस में सभी उपयोगकर्ताओं को प्रदर्शित करना चाहता हूं, लेकिन मुझे यह नहीं मिल रहा है , क्योंकि मुझे नहीं पता कि कनेक्शन संपत्ति को कैसे कॉल करें।
अगर मैं इनकैप्सुलेशन का उपयोग कर रहा हूं, तो यह आसान होगा, लेकिन मैं स्थानीय के रूप में कनेक्शन संपत्ति का उपयोग कर रहा हूं, और मैं वास्तव में नहीं जानता कि इस संपत्ति को कैसे कॉल किया जाए, मैं इसे कैसे कॉल कर सकता हूं इनकैप्सुलेशन का उपयोग किए बिना?
db.php
<?php
class DbConnect {
private $host = 'localhost';
private $dbname = 'database';
private $username = 'root';
private $password = '';
public function __construct() {
try {
$conn = new PDO("mysql:host=$this->host;dbname=$this->dbname", $this->username, $this->password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $exception) {
throw new Exception($exception->getMessage());
}
}
}
main.php
<?php
require_once 'db.php';
class Main extends DbConnect {
public function __construct() {
parent::__construct();
}
public function ShowUsers() {
$sql = "SELECT * FROM users";
$result = parent::__construct()->prepare($sql); //Problem here
$result->execute();
}
}
$object = new Main();
$object->ShowUsers();
नोट: मैं इसे काम करने के लिए एनकैप्सुलेशन का उपयोग नहीं करना चाहता, मैं सीखना चाहता हूं कि यदि संभव हो तो एनकैप्सुलेशन का उपयोग किए बिना वेरिएबल को कैसे कॉल करें।
1 उत्तर
ऊपर दिए गए कोड और टिप्पणियों के आधार पर, मेरा सुझाव है कि आप $conn
को अपनी DbConnect
कक्षा में सुरक्षित घोषित करें:
<?php
// db.php
class DbConnect {
private $host = 'localhost';
private $dbname = 'database';
private $username = 'root';
private $password = '';
protected $conn;
public function __construct() {
try {
$this->conn = new PDO("mysql:host=$this->host;dbname=$this->dbname", $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $exception) {
throw new Exception($exception->getMessage());
}
}
}
फिर main.php में, आप यह कर सकते हैं:
<?php
// main.php
require_once 'db.php';
class Main extends DbConnect {
public function __construct() {
parent::__construct();
}
public function ShowUsers() {
$sql = "SELECT * FROM users";
$result = $this->conn->prepare($sql);
$result->execute();
}
}
$object = new Main();
$object->ShowUsers();
?>
construct
अंदर Main
वर्ग की आवश्यकता नहीं है।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।
$conn
किसी भी चीज़ को असाइन नहीं किया है, इसलिए उपवर्ग के पास इसे एक्सेस करने का कोई तरीका नहीं है।Main
के निर्माण का कोई मतलब नहीं है।ShowUsers()
विधि में इस संपत्ति का उपयोग कैसे करें और क्वेरी को निष्पादित करें।$conn
को__construct()
में स्थानीय चर के रूप में बनाया गया है, लेकिन किसी ऑब्जेक्ट प्रॉपर्टी को कभी असाइन नहीं किया गया है। जब तक इसे किसी ऑब्जेक्ट प्रॉपर्टी (जैसेprotected $conn
) को असाइन नहीं किया जाता है, तब तक यह उसtry
/catch
ब्लॉक के बाहर पहुंच योग्य नहीं होगा, जिसमें आपने इसे घोषित किया है।