Global variables Published the 2019-08-29 Globals are variables defined on the top-level of PHP scripts. They can be accessed from within a function by explicitly using `global $var`. ## Bad idea: Using global variables and the `global` keyword Using globals means that your *entire* code is tied to some top-level variables, which means that: - the variable name cannot change - the variable content can change at any time - you can't have a function working on different instances An usual example we see is the following. ```php query("SELECT id, title, author FROM articles") ->fetchAll(PDO::FETCH_ASSOC); } $articles = get_articles(); ``` ## Good idea: Using parameters, or even classes Following the example below, the most direct change you can do is simply passing `$db` as a parameter. The snippet in the previous example then becomes the following. ```php query("SELECT id, title, author FROM articles") ->fetchAll(PDO::FETCH_ASSOC); } $articles = get_articles($db); ``` However, in this example, we can clearly see that the function will always interact with an instance of our DB class. That means that, since it works on a live variable, it can become a full class. ```php db = $db; } public function get_articles() { return $this->db->query("SELECT id, title, author FROM articles") ->fetchAll(PDO::FETCH_ASSOC); } } $repo = new ArticleRepository(get_db()); $articles = $repo->get_articles(); ```