Bonjour,

Voila je rencontre un petit problème avec mon code.

medoo_fonction_test.php

<?php
function dbConnect()
{
    require('Medoo.php');

    use Medoo\Medoo;

    // Initialize
    $database = new Medoo([
        'database_type' => 'mysql',
        'database_name' => 'test',
        'server' => 'localhost',
        'username' => 'root',
        'password' => ''
    ]);
}

class User
{
  public function userinfo($getid) 
  {
    $db = dbConnect();

    $req = $database->select("userinfo", [
    "name",
    "lastname",
    "email"
], [
    "id" => $getid
]);
    return $req;
  }
}
?>

fonction_index.php


<?php
     require('medoo_fonction_test.php');

     $getid = $_GET['id'];
     $member = new User();
     $result = $member->userInfo($getid);

    foreach($result as $data)
    {

    echo "name:" . $data["name"] . " - email:" . $data["email"] . "<br/>";

    }
?>```

Je recois le message d'erreur suivant :
En lançant fonction_index.php et en faisant donc appel à la fonction $db = dbConnect(); j'ai ce message d'erreur :

    Parse error: syntax error, unexpected 'use' (T_USE) in

Si je mets la ligne "use Medoo\Medoo;" en dehors de la fonction (avant ou après) cela m'affiche :

    Fatal error: Uncaught Error: Call to a member function select() on null in

Si je n'utilise pas le framework, et que j'indique directement les données pour se connecter à la base de donnée, cela fonctionne.
Comment remédier à cette erreur avec "USE"

Merci

2 réponses


Bonsoir.
use ne s'utilise pas dans une fonction, ensuite, dans ta fonction dbConnect au lieu d'initialiser ta connection dans une variable, retournes la via la fonction.
Sans oublier que si tu n'utilises pas composer pour installer tes librairies externes et les charger, il est inutile d'utiliser use étant donné que le use n'est à utiliser qu'avec la notion de namespace.
Exemple pour la totalité :

require 'Medoo.php';
function dbConnect()
{
    return new Medoo([
        'database_type' => 'mysql',
        'database_name' => 'test',
        'server' => 'localhost',
        'username' => 'root',
        'password' => ''
    ]);
}
class User
{
  public function userInfo($getid) 
  {
    $db = dbConnect();
    $req = $database->select("userinfo", [
        "name", "lastname", "email"
    ], ["id" => $getid]);
    return $req;
  }
}

Merci pour votre réponse.

Je n'utilise pas Composer. J'ai extrait le fichier Medoo.php et ajouté à la racine du site.

Le problème rencontré lorsque je n'utilise pas "use Medoo\Medoo", c'est que cela me renvoie cette erreur.

Fatal error: Uncaught Error: Class 'Medoo' not found

Le fichier Medoo.php est bien inclus avant la fonction, comme dans votre code.