zamanphp
Member
با سلام
اين سوالمو از كساني مي پرسم كه برنامه هاشونو بصورت oo مي نويسن:
من چيزي حدود 80% برنامه هامو بصورت oo مي نويسم و براي اولين بار به يه مشكل كوچولو برخورد كردم البته من يه راه براش پيدا كردم ولي مي واستم بدونم دوستان ديگه راه حل ديگه اي سراغ دارند يا نه؟
مشكل در مورد ارث بري هست به كد زير توجه كنيد:البته اين فقط يه مثال ساده هست تا منظورم رو متوجه بشيد:
حالا وقتي برنامه اجرا ميشه خطاي زير رو ميده :
چون خصيصه db_mysqli از داخل كلاس فرزند به متد query كلاس mysqli دسترسي نداره.
حالا من به طريق زير اين مشكل حل كردم :
همانطور كه مي بيند ابتدا ما از كلاس a يك نمونه مي سازيم و اين رو در متد كلاس b به صورت global تعريف مي كنيم و از طريق اين نمونه به متد query كلاس mysqli دسترسي پيدا ميكنيم.
دوستان اگه راه حل ديگه اي سراغ دارند خواهشمندم همين جا مطرح كنيد.
اين سوالمو از كساني مي پرسم كه برنامه هاشونو بصورت oo مي نويسن:
من چيزي حدود 80% برنامه هامو بصورت oo مي نويسم و براي اولين بار به يه مشكل كوچولو برخورد كردم البته من يه راه براش پيدا كردم ولي مي واستم بدونم دوستان ديگه راه حل ديگه اي سراغ دارند يا نه؟
مشكل در مورد ارث بري هست به كد زير توجه كنيد:البته اين فقط يه مثال ساده هست تا منظورم رو متوجه بشيد:
PHP:
<?php
class a
{
public $db_mysqli = '';
public function __construct()
{
$this->db_mysqli = new mysqli('host','user','pass','db');
}
}
class b extends a
{
public function __construct($query)
{
$result = $this->db_mysqli->query($query);
}
}
$obj =new b("select * from mytable");
?>
کد:
//Fatal error:Call to a member function query() on a non-object
حالا من به طريق زير اين مشكل حل كردم :
PHP:
<?php
class a
{
public $db_mysqli = '';
public function __construct()
{
$this->db_mysqli = new mysqli('host','user','pass','db');
}
}
class b extends a
{
public function __construct($query)
{
global $obj1;
$result = $obj1->db_mysqli->query($query);
}
}
$obj1 = new a();
$obj =new b("select * from mytable");
?>
دوستان اگه راه حل ديگه اي سراغ دارند خواهشمندم همين جا مطرح كنيد.