php
  • oop
  • 2009-10-23 17 views 6 likes 
    6

    लंबे समय तक पढ़ने और परीक्षण के लिए, लेकिन मुझे पता है। यह सही PHP ओओपी कोड है, यायह ओओपी है या ओओपी

    Class User { 
    
        function Add($Name, $Password){ 
        $sql_str = "INSERT INTO User SET Name = '$Name', Password = '$Password'"; 
        $sql->do_sql($sql_str); 
        } 
    
        function Del($UserID) { 
        $sql_str = "DELETE FROM User WHERE UserID = '$UserID'"; 
        $sql->do_sql($sql_str); 
        } 
    
        function Show ($Limit) 
        if ($limit > 0){ 
         $sql_str = "SELECT * FROM User ORDER BY Name LIMIT $Limit"; 
        }else{ 
         $sql_str = "SELECT * FROM User ORDER BY Name"; 
        } 
        $result = $sql->do_sql($sql_str); 
        for ($i = 0; $i < COUNT($result); $i++){ 
         $data[$i]['UserID'] = .... 
         $data[$i]['Name'] = .... 
        } 
        return $Data 
        } 
    
    } 
    $MyUser = new User; 
    

    और अब फ़ाइल userControl.php से मैं क्रियाओं को नियंत्रित कर सकता हूं। अगर मैं कुछ करना चाहता हूं, तो मैं उपयोगकर्ता वर्ग के उदाहरण पर कार्रवाई भेज सकता हूं: $MyUser->Add($Name, $Password); क्या यह दृष्टिकोण समूहबद्ध फ़ंक्शन की तरह है और ओओपी नहीं है या क्या यह सेटर्स और गेटर्स का उपयोग करना बेहतर है?

    यदि यह उदाहरण ओओपी नहीं है, तो मैं क्या गलत करता हूं और इस उदाहरण को ओओपी तरीका कैसे करना है?

    Tnx

    +0

    मैं इसे एक नीचे वोट के लायक है नहीं लगता। यह एक अच्छी तरह से तैयार प्रश्न है और एक लिटल कोड का थोड़ा सा दिखाता है। मुझे लगता है कि यह +1 के लायक है, भले ही यह 'सुंदर' या 'सही' न हो। – PatrikAkerstrand

    +0

    मुझे लगता है कि यदि आप क्लास UserAccount को कॉल करते हैं, तो आप जाने के लिए बहुत अच्छे हैं। – DanMan

    उत्तर

    0

    तकनीकी तौर पर यह है, लेकिन आप या तो कोड का एक बहुत कुछ भूल रहे हैं या अपने तरीकों से काम नहीं चलेगा। आप कहीं भी $ sql परिभाषित नहीं लग रहे हैं। चूंकि डुप्लिकेट कोड को खत्म करते समय ओओपी की सुंदरता वास्तव में चमकता है, और आप अपने सभी तरीकों से $ sql का उपयोग करते हैं, तो यह देखना अच्छा लगेगा कि आपने इसका निपटारा कैसे किया। पूर्ण, काम करने के बिना, कोड सुझाव देना मुश्किल है।

    मेरा मतलब क्या है इसका संक्षिप्त उदाहरण यहां दिया गया है। आप PHP5 के किसी भी OOP सुविधाओं का उपयोग नहीं कर रहे हैं जब से मैं PHP4 के साथ रह सकते हैं:

    class User 
    { 
        var $sql; 
        function User() 
        { 
        $this->sql = new DatabaseConnection(); 
        } 
    
        function add($data) 
        { 
        $query = '...query here...'; 
        $this->sql->query($query); 
        } 
    } 
    

    आप ठोस, उद्यम स्तर कोड के कुछ उदाहरण देखें चाहते हैं, मैं अत्यधिक में से कुछ देखने की सलाह देते हैं Zend Framework में घटक।

    6

    आप इस बारे में सही तरीके से नहीं जा रहे हैं। आप वास्तव में क्या करना चाहते हैं उसके पास एक क्लास उपयोगकर्ता है जो एक उपयोगकर्ता को दर्शाता है, जिसमें इसे प्रतिबिंबित करने के तरीकों के साथ।

    विकिपीडिया से:

    ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, एक विधि एक सबरूटीन है विशेष रूप से जुड़े या तो एक वर्ग (इस स्थिति में यह एक वर्ग विधि या एक स्थिर विधि कहा जाता है के साथ) या किसी ऑब्जेक्ट के साथ (जिस स्थिति में यह इंस्टेंस विधि है)। डेटाबेस

  • से

    • लोड डेटाबेस

    और करने के लिए एक स्थिर विधि के लिए सहेजें:

  • एक उपयोगकर्ता वस्तु बहुत कम से कम करना चाहिए उदाहरण के तरीकों के लिए इसे सक्षम करने - एक उपयोगकर्ता बनाएँ और एक उपयोगकर्ता वस्तु वापस।

    इसमें PHP5 में PHP5 या उपयोगकर्ता (args) में एक कन्स्ट्रक्टर विधि (__construct (args) भी होनी चाहिए) जिसे उपयोगकर्ता बनाया जाने पर बुलाया जाना चाहिए। यह शायद एक आईडी या उपयोगकर्ता नाम या कुछ पहचानने के लिए स्वीकार करना चाहिए ताकि यह सही उपयोगकर्ता को लोड कर सके।

    सादगी के लिए और केवल आपके लिए सबकुछ नहीं करने के लिए, उपयोगकर्ता आईडी को केवल एक आईडी और नाम के साथ कल्पना करें।यहाँ वर्ग कैसे दिखाई दे सकती है:

    मान लिया जाये कि PHP5:

    class User{ 
        private $id; 
        public $name; 
    
        public function __construct($id){ 
         $this->load($id); 
        } 
    
        public function load($id){ 
         // Do a query to load a user and initialize $id and $name. 
        } 
    
        public function save(){ 
         // Do a query saving $this->id and $this->name to the database. 
        } 
    
        public static function create($name){ 
         // Do a query to create a user with name $name. 
        } 
    } 
    

    आप अपने आईडी दी एक उपयोगकर्ता new User($id) का उपयोग कर लोड कर सकते हैं, या एक बनाएं User::create($name)

    दिया लाक्षणिक क्रूस पर चढ़ाया होने का खतरा कम, मैं wouldn PHP में सेटर्स और गेटर्स से परेशान नहीं है।

    +1

    शुरू करने से पहले ..... _ मैं सामान्य रूप से PHP_ में सेटर्स और गेटर्स से परेशान नहीं होगा? या सिर्फ इस विशेष उदाहरण के लिए? :) – dbf

    2

    $MyUser->Add($Name, $Password); अजीब लग रहा है।

    class UserManager { 
        public function add(User $user) { 
         $sql->do_sql("INSERT INTO users (id, name) VALUES (".$user->getId().", ".$user->getName().")"); 
        } 
        public function delete(User $user) { 
         $sql->do_sql("DELETE FROM users WHERE id = ".$user->getId()." LIMIT 1"); 
        } 
        public function show(User $user) { 
         return $sql->do_sql("SELECT * FROM users WHERE id = ".$user->getId()); 
        } 
    } 
    

    और

    class User { 
        private $_id; 
        private $_name; 
        public function getId(){ 
         return $this->_id; 
        } 
        public function getName(){ 
         return $this->_name; 
        } 
    } 
    

    एक डिजाइन पैटर्न है कि फिट हो सकता है Active Record है: कुछ इस तरह की कोशिश करो।

    +0

    मैं उन पागल लोगों में से एक हूं जो सोचते हैं कि गेटर और सेटर विधियां सुगंधित हैं, लेकिन वाईएमएमवी। मुझे यह भी स्वीकार करना होगा कि मैं कभी-कभी खुद का उपयोग करता हूं, लेकिन कम से कम मुझे इसके बारे में बुरा लगता है। ;) – DanMan

    0

    Thanx! मुझे पता है कि ओओपी के बारे में कुछ बात मेरे दिमाग में सही जगह नहीं है, मुझे हिलाएं। मैं ऐसा क्यों करता हूं जैसे मैं करता हूं। सबसे पहले मैं टेम्पलेट इंजन का उपयोग करें। उपयोगकर्ता पोस्ट डेटा के बाद यह डेटा पोस्ट एक्शन फ़ाइल। वहाँ कुछ actionUser.php:

    $op = ''; 
    IF (ISSET($_REQUEST['op'])){ 
        $op = ADDSLASHES($_REQUEST['op']); 
    } 
    
    if ($op == 'AddUser'){ 
    $Name = ADDSLASHES($_REQUEST['Name']) 
    $Password = ADDSLASHES($_REQUEST['Password']) 
    $MyUser->Add($Name, $Password) 
    } 
    

    फिर क्लास उपयोगकर्ता को कार्रवाई भेजें।

    उपयोगकर्ता क्लास है से थोड़ा थोड़ा और अधिक समारोह के

    class User{ 
    private $SQL; 
    
        public function __construct(){ 
         $this->SQL = SQL::getInstance(); 
        } 
    
        public Function AddUser ($Name, $Password) { 
        $sql_str ="INSERT INTO USER SET Name = '$Name', Password='$Password'"; 
        $this->SQL->do_sql($sql_str); 
        } 
    
        public Function DelUser($UserID){ 
         $sql_str = "DELETE FROM User WHERE UserID = '$UserID'"; 
         $sql->do_sql($sql_str); 
    
        } 
    
        public Function Login($Login, $Password){ 
         $sql_str = "SELECT * FROM User WHERE Login = '$Login' AND Password = '$Password' "; 
         LIST($sql_result, $sql_count) = $this->SQL->do_sql($sql_str); 
         if ($sql_count == 1){ 
          $_SESSION["UserID"] = $this->SQL->result_strip($sql_result, 0, "AdminUserID"); 
          $_SESSION["Login"] = $this->SQL->result_strip($sql_result, 0, "Login"); 
          $sql_str = "UPDATE User SET LastLogin = NOW()"; 
          $this->SQL->do_sql($sql_str); 
    
         } 
        } 
    
        public Function Logout(){ 
         $_SESSION = array(); 
         if (isset($_COOKIE[session_name()])) { 
          setcookie(session_name(), '', time()-42000, '/'); 
         } 
         session_destroy(); 
    
        } 
    } 
    
    संबंधित मुद्दे