2012-06-25 11 views
8

मैंने PHP में बहुत सारे कोड किए हैं और ऑब्जेक्ट उन्मुख है, लेकिन अब तक, मेरी सभी कक्षाएं "एकवचन" रही हैं, मुझे लगता है कि आप इसे कॉल कर सकते हैं। मैं एक वर्ग (डुप्लिकेट कोड से छुटकारा पाने के लिए) को बढ़ाने के लिए कई कक्षाओं (जिसमें 5 या समान समान विधियां हैं) को बदलने की प्रक्रिया में हूं। मैं कुछ मुद्दों में भाग रहा हूं।PHP - विस्तार कक्षा

मैं अभिभावक वर्ग में किसी विधि तक पहुंचने का प्रयास कर रहा हूं, लेकिन आप समस्या देख सकते हैं।

जनक वर्ग:

class DatabaseObject { 

    public static function find_all() { 
     return self::find_by_sql("SELECT * FROM " . self::$table_name); 
    } 
} 

बाल वर्ग:

class Topics extends DatabaseObject { 

    protected static $table_name = "master_cat"; 
    protected static $db_fields = array('cat_id', 'category'); 
    public $cat_id; 
    public $category; 

    } 

कोड php/HTML फ़ाइल से इस तालिका से सभी जानकारी का उपयोग करने की कोशिश कर रहा है:

$topics=Topics::find_all(); 

foreach($topics as $topic): 
    echo $topic->category; 
endforeach; 

आप देख सकते हैं , अधिकांश कोड चीजों को करने के नए तरीके में विलय नहीं किया गया है। मुझे स्वयं :: $ table_name को बदलने की ज़रूरत है जो अब मैं नए तरीके से काम नहीं कर रहा हूं। मेरे पास इस ऑब्जेक्ट को विस्तारित करने के बारे में 5 वर्ग होंगे, इसलिए कोडिंग का सबसे अच्छा तरीका क्या है, इसलिए मैं एक अलग विधि के साथ अलग-अलग तालिकाओं तक पहुंच सकता हूं (5 अलग-अलग कक्षाओं में इस सटीक find_all() विधि को शामिल करने के बजाय।

+0

मैं अनुशंसा करता हूं कि आप ओओपी के बारे में अधिक पढ़ें और विशेष रूप से जिस तरह से इसे PHP में लागू किया गया है। Givi एनजी आप एक कामकाजी कोड असली समस्या हल नहीं करेंगे। – Adi

+11

इसके विपरीत, मैं अन्य लोगों के कोड से सीखता हूं। शायद मैं किसी के लिए वास्तव में सवाल का जवाब देने का इंतजार करूंगा। – KickingLettuce

+0

Ive पढ़ते हैं "मैं अन्य लोगों के कोड से सीखता हूं" अक्सर यह जानना कि यह अच्छी तरह से काम नहीं करता है। आपको एक किताब पढ़ने पर विचार करना चाहिए। – KingCrunch

उत्तर

18

आप mentioned below के रूप में देर से स्थिर बंधन की कोशिश कर सकते हैं, या एक सिंगलटन समाधान के रूप में अच्छी तरह से काम करना चाहिए:।

<?php 
abstract class DatabaseObject { 
    private $table; 
    private $fields; 

    protected function __construct($table, $fields) { 
    $this->table = $table; 
    $this->fields = $fields; 
    } 

    public function find_all() { 
    return $this->find_by_sql('SELECT * FROM ' . $this->table); 
    } 
} 

class Topics extends DatabaseObject { 
    private static $instance; 

    public static function get_instance() { 
    if (!isset(self::$instance)) { 
     self::$instance = new Topics('master_cat', array('cat_id', 'category')); 
    } 

    return self::$instance; 
    } 
} 

Topics::get_instance()->find_all(); 
+0

+1 धैर्य – Adi

+8

+1 के लिए हमें पढ़ाने के लिए प्रबुद्ध किया गया है, और प्रत्येक को बनाने (पुस्तक को पढ़ने के लिए) लोग चुप रहेंगे – Ibu

2

आपको देखना चाहिए । PHP में Late Static Binding की अवधारणा में यह आप एक स्थिर निरंतर या वर्ग बुलाया गया था से समारोह का उपयोग करने की अनुमति देता है

संबंधित मुद्दे