Results 1 to 4 of 4

Thread: Double Dependency Injection?

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Private Whiskas's Avatar
    Join Date
    Jan 2015
    Posts
    84
    Thanks
    69
    Thanked 20 Times in 17 Posts
    Quote Originally Posted by kung foo man View Post
    PHP Code:
    $_SESSION[user] = $userService->getUser(); 
    A session entry is a serialized piece of data, which cannot hold any resource variables.
    Thanks this is the thing I needed to know. I was wrongly thinking that mysqli object was the main problem.

    Quote Originally Posted by kung foo man View Post
    read the stuff you need every time a user opens the page, so you don't have any out-of-sync data.
    I wanted to make global user class object that would have functions (with mysql queries) returning appropriate data.

    Like $user->getSomething(); and it would return information from the database about that something (groups this user belongs etc).

    So, now my problem is finding a way to make global object.
    Attempt:

    index.php
    PHP Code:
    global $user;

    if (isset(
    $user)) {
        
    header("Location: home.php");
    }

    if (isset(
    $_POST['btn-login'])) {

        
    $userService = new UserService($mysqli$_POST['identity_number'], $_POST['password']);
        if (
    $userService->login()) {
            
    $user $userService->getUser();
            
    header("Location: home.php");
        }

    home.php
    PHP Code:
    global $user;

    if (!isset(
    $user))
        
    header("Location: index.php"); 
    After moving to home.php variable $user isn't set..

    Reading most comments over this problem directs to Singleton Pattern, but personally I have no clue, how to pass parameters to the instance, so it could contain $id, $name etc.

    PHP Code:
    class Singleton {
        private static 
    $instance;

        private function 
    __construct() {}
        private function 
    __clone() {}

        public static function 
    getInstance() {
            if (!
    Singleton::$instance instanceof self) {
                 
    Singleton::$instance = new self();
            }
            return 
    Singleton::$instance;
        }

        public function 
    DoSomething() {
            ...
        }

    Any known sollution to make class object globl score?

    Thanks again for your help.

    EDIT:

    I found sollution:

    PHP Code:
    <?php

    /**
     * Created by PhpStorm.
     * User: Meh
     * Date: 20.11.2016
     * Time: 12:51
     */
    class DB extends MySQLi {
        private static 
    $instance null ;

        private 
    $host 'localhost';
        private 
    $user "root";
        private 
    $password "Wilki0101";
        private 
    $database "mydb";

        public function 
    __construct($host$user$password$database){
            
    parent::__construct($host$user$password$database);
        }

        public static function 
    getInstance(){
            if (
    self::$instance == null){
                
    self::$instance = new self('localhost'"user""pass""db");
            }
            return 
    self::$instance ;
        }
    }
    Now, when the Class user needs to make queries, it just get's an instance like that:

    PHP Code:
    include "DB.php";

    class 
    User
    {
        
    //private static $instance;
        
    public $_id;
        public 
    $_name;
        public 
    $_lastname;
        public 
    $_groupID;
        public 
    $_subgroupID;
        protected 
    $_db;

        public function 
    __construct($id$name$lastname$groupID$subgroupID)
        {
            
    $this->_id $id;
            
    $this->_name $name;
            
    $this->_lastname $lastname;
            
    $this->_groupID $groupID;
            
    $this->_subgroupID $subgroupID;
        }

        public function 
    __toString()
        {
            return 
    $this->_name " " $this->_lastname;
        }

        public function 
    getUserGroups()
        {
            
    $this->_db DB::getInstance();

            
    $result $this->_db->query("select p.idpodgrupy, p.nazwapodgrupy from podgrupy p
                                    join grupy_podgrupy g
                                    on p.idpodgrupy=g.idpodgrupy
                                    join grupy gp
                                    on gp.idgrupy = g.idgrupy
                                    join uzytkownicy u
                                    on u.idgrupy = gp.idgrupy
                                    where u.iduzytkownika = 16"
    );

            
    print_r($result);    
        }

    And the $results aren't empty.

    Thanks anyway kung for your tip with $_SESSION!
    Last edited by Whiskas; 20th November 2016 at 12:29.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •