مشکل oop

zamanphp

Member
با سلام
اين سوالمو از كساني مي پرسم كه برنامه هاشونو بصورت 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
چون خصيصه db_mysqli از داخل كلاس فرزند به متد query كلاس mysqli دسترسي نداره.
حالا من به طريق زير اين مشكل حل كردم :
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");
?>
همانطور كه مي بيند ابتدا ما از كلاس a يك نمونه مي سازيم و اين رو در متد كلاس b به صورت global تعريف مي كنيم و از طريق اين نمونه به متد query كلاس mysqli دسترسي پيدا ميكنيم.
دوستان اگه راه حل ديگه اي سراغ دارند خواهشمندم همين جا مطرح كنيد.
 

arashdanger

Member
خوب مشکل شما با ارث بری چندگانه حل میشه که متاسفانه توسط php ساپورت نمیشه، توی زبانهای پیشرفته تر مثل جاوا از interface ها برای حل این مشکل استفاده میشه که اون هم تو php نیست ولی بنظرم میشه یه جورایی شبیه سازیش کرد. در مورد interfaceها یه تحقیقی بکنید متوجه میشید.
موفق باشین
 

جدیدترین ارسال ها

بالا