Groupe php

2024

27

jan.

Espaces de noms en php

0

Depuis PHP 5.4 il est possible afin d'éviter les colisions de noms d'organiser son code PHP à l'aide d'espaces de noms.

Pour ce faire nous avons besoin de plusieurs éléments.

  • Un répertoire qui contiendra les sources des fichiers php que nous souhaiterons utiliser.
  • Un autoloader que nous placerons dans le fichier index du site ou le fichier main du programme.
  • Les mots clés namespace sur les fichiers sources et use sur les fichiers qui utiliseront les bibliothéques.

Dans l'exemple suivant, nous allons créer une classe test qui sera accessible dans un fichier main. les différentes bibliothèques susceptibles d'être utilisées, le seront dans un répertoire intitulé src qu'ira parcourir l'autoloader.

  1.Créer une bibiothèque source

 repertoires sources

Dans le répertoire principal contenant le programme php, on va créer un répertoire src contenant tous les répertoires contenant les bibliothéques ainsi on aura test, Views et controllers.

Dans controllers on aura notre fichier requeteController.php contenant la classe requeteController.

Pour des raisons de facilité de lecture, il est conseillé d'appeler la classe du même nom que le fichier, mais il est possible de l'appeler différemment. Lors de l'appel il faudra néanmoins spécifier la différence. Il est également possible de créer des modules contenant des objets autres que des classes, comme des tableaux, des interfaces, etc.

 2.Code du fichier requeteController.php

<$php

namespace test\Controllers;

class requeteController{

    private int $mapropriete;
    private string $tapropriete;

    function __construct(int $param1,string $param2){

        $this->mapropriete=$param1;
        $this->tapropriete=$param2;
    }

    public function getMaPropriete(){
        return $this->mapropriete;
    }
}
?>


On voit que l'espace de noms est matérialisé par la première ligne. l'appel dans le fichier principal se fera sur cet espace de noms.

3.Code du fichier main.php

 

<$php

  use test\MyApp;
  use test\Controllers\requeteController;

  require('autoloader.php');

  $instance1=new MyApp(1,2);
  $requete=new requeteController(3,"chaine");

  print_r("la somme est ".$instance1->somme());
  print_r("requetecontroller=".$requete->getMaPropriete());

?>

L'appel à l'espace de nom s'effectue grâce au mot clé use. Toutefois l'appel ne peut aboutir si les fichiers de bibliothèques ne sont pas préalablement chargés par l'application. Contrairement à python ou la directive import charge le module et permet l'appel des classes. Dans PHP les deux traitements sont dissociés. C'est au fichier autoloader de charger les bibliothéques et de faire le lien entre l'espace de noms de la classe et l'arborescence de fichier. Quand l'autoloader trouve la correspondance, il effectue un require sur le fichier correspondant.

4.Code de autoloader.php


 
define('SRC_DIR','src\\');

$src_path=dirname(__FILE__).'\\'.SRC_DIR;

set_include_path($src_path);

function my_psr4_autoloader($class) {
    // replace namespace separators with directory separators in the relative
    // class name, append with .php
    $file_path =  dirname(__FILE__).'\\'.SRC_DIR . $class . '.php';
    $file = str_replace('\\', '/', $file_path);
   
    // if the file exists, require it
    if (file_exists($file_path)) {
        require $file_path;
    }
}
spl_autoload_register('my_psr4_autoloader');
?>
Dans le code de l'autoloader, on remarque qu'il faut spécifier un répertoire de départ à partir duquel rechercher les bibliothèques. Faire une substitution de chaine pour permettre la correspondance entre les espaces de noms et l'arborescence des fichiers.
Si le fichier existe, alors il est chargé à l'aide d'un require.
C'est la fonction spl_autoload_reqister qui a ce rôle via une fonction passée en callback. Ici my_psr4_autoloader.
Article rédigé par GuruGeek le samedi 27 janvier 2024

2024

28

jan.

Première utilisation de postgresql

0

Après l'installation du paquet PostgreSQL, il va nous falloir modifier les utilisateurs de postgre. En effet, l'utilisateur postgre est l'équivalent de root sous mysql et a tout les pouvoir sur l'ensemble des tables de la base.

Dans un premier temps on change d'utilisateur système.


> sudo -s -u postgres

Ensuite on lance le client postgres


> psql

On crée le nouvel utilisateur


> CREATE USER

On définit les rôles de ce nouvel utilisateur avec


CREATE ROLE WITH

ALTER ROLE WITH

Les options disponibles sont :

SUPERUSER | NOSUPERUSER

CREATEDB | NOCREATEDB

CREATEROLE|NOCREATEROLE

CREATEUSER|NOCREATEUSER

Enfin il nous reste à associer un mot de passe à l'utilisateur.


> ALTER USER WITH ENCRYPTED PASSWORD

Les commandes postgre utiles:


\q quitter postgre

\d liste les bases de données

\dt liste les tables, il est aussi possible d'utiliser les requêtes systèmes.

 

Article rédigé par GuruGeek le dimanche 28 janvier 2024