הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   אובייקטים קבועים (https://hosts.co.il/forums/showthread.php?t=89499)

morsrh 11-05-11 18:43

אובייקטים קבועים
 
אהלן , אני מנסה ליצור משתנה שיכיל אובייקט שיהיה אפשר לגשת אליו מכל מקום , כלומר , יצירת אובייקט ולהכניס אותו אל תוך משתנה ואז להפוך את המשתנה הזה לגלובאלי

המטרה של זה זה שיהיה אפשר לגשת אליו מתוך מחלקות , פונקציות , ועוד בלי לשלוח אותו

עשיתי את הקוד הזה :

PHP קוד:

class mysqli{
    private 
$mysqli;
    
    function 
setConnection(){
        @require 
'config.php';
        
$this->mysqli = new mysqli("localhost"userpassword"jewish");
        if (
mysqli_connect_errno())
             return 
false;
        return 
true;
    }
    
    function 
getConnection(){
        return 
$this->mysqli;
    }
}

$MP_mysqli = new mysqli();
if(
$MP_mysqli -> setConnection())
    
define("mysqli"$MP_mysqli ->getConnection()); 

יש רק בעיה אחת , דיפיין לא יכול להכיל אובייקטים
עכשיו השאלה שלי היא איך אפשר לעשות שיהיה אובייקט גלובאלי ושיהיה אפשר לגשת אליו מכל מקום ללא השליחה שלו לפונקציה \ מחלקה

תודה

בניה 11-05-11 21:11

אתה יכול לעשות משהו כזה:
PHP קוד:

<?php
class app {
    
    static public 
$db;
    
    
    public static function 
init() {
        
//you can add here more functionality  
        
self::$db = new DB();
        
self::$db->connect();
    }
    
    public static function  
getDb() {
        return 
self::$db;
    }
    
}

//page startup:
app::init();

//i want to use db inside a function:
function use_db() {
    
    
$db app::getDb();
    
    
$db->query();
}
?>


Shay Ben Moshe 11-05-11 22:01

מה שאתה מחפש, ומה שבניה הציע נקרא singleton (קישור 1, קישור 2), זה design pattern שאמור לאפשר ליצור מופע אחד ויחיד (בד"כ) של מחלקה, שניתן לגשת אליו מכל מקום.
המימוש הנפוץ בPHP נראה כך:
PHP קוד:

<?php

class ClassName {
    private static 
$instance;
    
    private function 
__construct() { }
    private function 
__clone() { }
    
    public function 
get_instance() {
        if(
self::$instance === null) {
            
self::$instance = new self();
        }
        return 
self::$instance;
    }
    
}

הסיבה שהconstructor והclone הם private היא כדי שלא ניתן יהיה לשכפל את האובייקט או ליצור מופעים חדשים שלו, שלא דרך המחלקה עצמה. כן ניתן להכניס לconstructor מימוש וכמובן שהוא יפעל כרגיל.

בהצלחה.


כל הזמנים הם GMT +2. הזמן כעת הוא 18:52.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ