• 1 رای - 3 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
الگو های طراحی در شی گرایی
#11
ولی من در کیک پی اچ پی دیدم که همه کلاس ها به یک کلاس مرتبط میشند واقعا گیچ شدم
  پاسخ
تشکر شده توسط :
#12
بله توی cake , ci and zf توارث ( extends ) وجود داره اما این ارث برای API ها نیست. این extends بین کلاس شماست و کلاس controller
controller کلاسی هست که کلی از امکانات رو مثلا لود کردن API ها وجود داره
حرف هام رو با یه کد می زنم، شما لطف کن نظر بده - تورو خدااا Wink -
کد پی‌اچ‌پی:
// control.php
class control
{
    public 
$db;
    public function 
db()
    {
        include 
'library/database.php';
        
$this->db = new database($config);
    }
}

// my_class.php
include 'control.php';
class 
My_Class extends control
{
    
$this->db();
    
$this->db->connect();
    
$this->db->query($query);
    
$this->db->close();
}

// my_file.php
include 'control.php';
$cnr = new control;
$cnr->db();
$cnr->db->connect();
$cnr->db->query($query);
$cnr->db->close(); 
همونطور که گفتم این کد حاصل مطالعه رو اون فریم ورک ها نیست، من با توجه به چیزایی که دیدم سعی کردم مشابه سازی کنم و گفتم که نمی دونم این کار چقدر اصولی و درسته و نیست.
  پاسخ
تشکر شده توسط : zoghal
#13
هیچ کدوم از کلاسهای zf که از توارث چندگانه نداره
اما اینکه یک کلاس یک پدر و پدر یک پدر دیگر و به همین ترتیب خیلی رواج داره
  پاسخ
تشکر شده توسط :
#14
(۱۳۸۸ خرداد ۲۳, ۰۷:۱۵ ب.ظ)admin نوشته: هیچ کدوم از کلاسهای zf که از توارث چندگانه نداره
اما اینکه یک کلاس یک پدر و پدر یک پدر دیگر و به همین ترتیب خیلی رواج داره

متوجه نشدم؟
بله وجود داره که کلاسی ار کلاسه دیگه ارث ببره که اون کلاس ( کلاس پدر اول ) خودش از کلاس پدر دیگه یی ارث برده باشه - این هم شدنیه و هم کار آمد می تونه باشه جایی که لازم باشه

اما من می پرسم آیا درسته که اونجور توارثی اتفاق بیفته؟
اونجور توارث ( صالح ) :
نقل قول:مثلا کلاس دیتابیس از کلاس های کوکی ، سشن و سیکوریتی ارث میبره، بعد مثلا سیستم خبریش از کلاس دیتابیس ارث میبره ، و یک باره همه کلاس ها با هم مرتبط میشند
  پاسخ
تشکر شده توسط :
#15
فعلا دارم روش شدید تحقیق میکنم.
  پاسخ
تشکر شده توسط :
#16
نقل قول:اما من می پرسم آیا درسته که اونجور توارثی اتفاق بیفته؟
در خیلی از جاها درست نیست که وراثت به اون شکل اتفاق بیافته بسته به منظق برنامه داره. تعریف سطوح دسترسی برای همینه. بعضی وقتا هم می ام از ابستراکشن استفاده می کنیم.
Smile
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#17
خداییش من آخرش نفهمیدم از کدوم روش باید استفاده بکنم و کدوم بهتره. تو پرانتز یک راه رو هم خودم تست زدم ولی جواب نگرفتم تو مثال هایی که تو خود سایت پی اچ پی هست رو رو سیستم پیاده سازی کردم اما نشد که نشد

فرض کنید یک کلاس داریم به اسم آبجکت و به این صورت استفاده میشه
کد پی‌اچ‌پی:
$Controller = new Objects;
 
$data $Controller->FileManager->GetCategories(); 

FileManager در اصل نام کلاسی هست که باید توسط کلاس آبجکت فرا خوانی بشه
روش فراخوانی هم به تابع __get هست

و این هم خود کلاس أبجکت به صورت مختصر
کد پی‌اچ‌پی:
<?php
class Objects{
 
   

 
    public function 
__get($name) {
     include_once(
$name.'.class.php'
     
$this->{$name} = new $name;
    }

  
 ....  

    
}

?>

متاسفانه متغیر name رو داخل تابع اکو میکنم درست کار میکنه اما کلاس رو ایجاد نمیکنه و کلا خروجی هم نمیده (return)
  پاسخ
تشکر شده توسط :
#18
توی کلاس objectی که گذاشتی
کد پی‌اچ‌پی:
$this->{$name} = new $name
این خط که میاد یک شی رو درون متغییری که برای کلاس وجود نداره ایجاد می کنه
این کار عملیه؟ مگه نه اینکه ما متغییر هارو توی کلاس از قبل تعریف می کنیم
البته این قابل بررسیه ، از PHP هم بعید نیست Wink
  پاسخ
تشکر شده توسط :
#19
دقیقا یک پروپرتی ایجاد میکنم
خیلی جاها این رو دیدم پیاده سازی کردن
  پاسخ
تشکر شده توسط :
#20
صالح جون این راه یهو به ذهنم رسید
ببین به دردت میخوره

کد پی‌اچ‌پی:
<?php
class test
{
    public function 
get_name()
    {
        return 
"hello !";
    }
}

class 
test2
{
    public function 
get_name($txt)
    {
        echo 
$txt;
    }
}
class 
Objects
{
    private 
$name=array();
    
    public function 
set($var)
    {
        if(
array_key_exists($var,$this->name))
        {
            return 
$this->name[$var];
        }
        return 
$this->name[$var]=new $var;
    }
}
$obj=new Objects();
echo 
$obj->set(test)->get_name();
echo 
$obj->set(test2)->get_name('<br>naser<br>');
echo 
$obj->set(test)->get_name();
?>
  پاسخ
تشکر شده توسط : zoghal oia


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان