अनिवार्य रूप से, मैं केवल दो कक्षाएं बना रहा हूं, जहां एक वर्ग, इस मामले में कक्षा ए, किसी अन्य वर्ग में एक कार्य चलाता है, इस मामले में कक्षा बी, डेटाबेस से कुछ जानकारी प्राप्त करने के लिए।क्लास कन्स्ट्रक्टर अन्य वर्ग के साथ हस्तक्षेप
हालांकि, जब B_runtime()
वास्तव में डेटाबेस पर कॉल करता है तो मुझे त्रुटि Cannot access protected property A::$db
मिलती है।
क्या मुझे समझ नहीं आता कि भले ही मैं दो __construct
की राशि दोनों वर्गों में पीडीओ बयान वर्ग ए से डेटाबेस कनेक्शन का उपयोग करने पर बहुत लगातार किया जा रहा है है
मुझे यकीन है कि यह कुछ करने के लिए है हूँ इस तथ्य के साथ करें कि मैं कक्षा ए के भीतर से B_runtime()
चला रहा हूं क्योंकि ऐसा नहीं होता है अगर मैं इसे कक्षा ए
से जानता हूं तो मुझे पता है कि मैं कक्षा ए में protected $db;
को सार्वजनिक चर में बदल सकता हूं हालांकि, मैं वास्तव में उत्सुक हूं कि मैं इसे कैसे ठीक कर सकता हूं।
ob_start();
include('/config.php');
ob_end_clean();
$A = new A($db);
$B = new B($db);
echo $A->A_runtime();
class A{
protected $db;
public function __construct($db){
$this->db = $db;
}
public function A_runtime(){
return B::B_runtime();
}
}
class B{
protected $db;
public function __construct($db){
$this->db = $db;
}
public function B_runtime(){
$preparedStatement = $this->db->prepare('SELECT * FROM z_mod_html WHERE ModuleLink = :moduleid LIMIT 1');
$preparedStatement->execute(array(':moduleid' => '1'));
$rows = $preparedStatement->fetchAll();
return $rows[0]['HTML'];
}
}
कोड की लंबी राशि के लिए खेद है - यह बहुत सराहना की जाएगी अगर कोई किसी भी विचार या सुझाव है। धन्यवाद।
हां सही जवाब, तथापि, वहाँ एक तरीका है कि मैं दो कंस्ट्रक्टर्स साथ ऐसा कर सकते के रूप में मैं अब कर रहा हूँ है? – SineCosine
@SineCosine आप अपने सभी रचनाकारों को रख सकते हैं। मैंने बस एक // // ... 'चिह्न रखा जहां कन्स्ट्रक्टर है, सब कुछ वही रहता है। केवल विधि ('A_runtime') और जिस तरीके से आप इसे कॉल करते हैं। – kapa
ओह, पूरी तरह से याद किया। धन्यवाद मुझे नहीं पता था कि आप यह कर सकते हैं। – SineCosine