michael jones
michael jones

Reputation: 740

PHP Class Parameters used twice

I am new to OOP, and I am switching all of my websites code to it! I am currently writing a class that grabs a user's information, and will eventually update it.

The code I am using is below:

<?php

    require("C:\wamp\www\postin'\db_connection.php");
    session_start();

    class user {

        public function __construct($userid, $connection, $information) {
            $this->userid = $userid;
            $this->connection = $connection;
            $this->information = $information;
        }   

        public function user_information($userid, $connection, $information) {
            $query = "SELECT * FROM users WHERE id = :id";
            $params = array(':id' => $userid);
            try{
                $stmt = $connection->prepare($query);
                $result = $stmt->execute($params);
            }                               
            catch(PDOException $ex){
                echo ("Failed to run query: " . $ex->getMessage());
            }                       
            $columns = $stmt->fetch();
            return $columns["$information"];
        }

    }

    $username = new user($_SESSION["logged_in"], $connection, "username");
    echo $username->user_information($_SESSION["logged_in"], $connection, "username");
?>

Now as you can see on the last two lines of code (one from the end) I have to use the parameters twice. Basically the first parameter says what the ID is, second says what the $connection is, and the third is what I want to grab from the database. So what am I doing wrong? Did I define something I did not need to?

EDIT

Would the following be valid as well?

<?php

require("C:\wamp\www\postin'\db_connection.php");
session_start();

class user {

    public function user_information($userid, $connection, $information) {
        $query = "SELECT * FROM users WHERE id = :id";
        $params = array(':id' => $userid);
        try{
            $stmt = $connection->prepare($query);
            $result = $stmt->execute($params);
        }                               
        catch(PDOException $ex){
            echo ("Failed to run query: " . $ex->getMessage());
        }                       
        $columns = $stmt->fetch();
        return $columns["$information"];
    }

}

$username = new user();
echo $username->user_information($_SESSION["logged_in"], $connection, "username");
?>

Like is this in-properer, or wrong...?

Upvotes: 1

Views: 156

Answers (2)

Daniel
Daniel

Reputation: 4946

Since you have a lot of questions about the way a class works and about OOP I will try to give you a little direction. There is no standard way of building your class. You are the one that decides what goes where in terms of what belongs to the class and what needs to be injected. This is just to tell you that you cannot pin yourself down. You need to get a feel for it and build a logic. I took your class and rebuild it some with added comments. Hope that will help you some. Good luck!

    <?php

require ("C:\wamp\www\postin'\db_connection.php");
session_start();

class user {

    public $dbconnection;

    public function __construct($connection) {
        /**
         * Your user class interacts with the database.
         * Inject the connection here and set your
         * global class variable.
         */
        $this -> dbconnection = $connection;
    }

    public function user_information($userid, $column) {
        /**
         * The userid and column are specific for this
         * method action. No need to set these variables
         * in the global scope of the class.
         */

        $query = "SELECT" . $column . " FROM users WHERE id = :id";

        $params = array(':id' => $userid);
        try {
            $stmt = $this -> dbconnection -> prepare($query);
            $stmt -> execute($params);
        } catch(PDOException $ex) {
            echo("Failed to run query: " . $ex -> getMessage());
        }
        $result = $stmt -> fetch();

        return $result;
    }

}

$username = new user($connection);
echo $username -> user_information($_SESSION["logged_in"], $information);
?>

Upvotes: 0

Mureinik
Mureinik

Reputation: 312056

If the user class has all the information it needs as data members, then user_information doesn't need to take any arguments:

public function user_information() {
    $query = "SELECT * FROM users WHERE id = :id";
    $params = array(':id' => $this->userid);
    try{
        $stmt = $this->connection->prepare($query);
        $result = $stmt->execute($params);
    }                               
    catch(PDOException $ex){
        echo ("Failed to run query: " . $ex->getMessage());
    }                       
    $columns = $stmt->fetch();
    return $columns[$this->information];
}

Upvotes: 2

Related Questions