سلام من وقتی از namespace ها استفاده می کنم با ارور زیر مواجه میشم
( ! ) Error: Class 'der\PDO' not found in C:\xampp\htdocs\learn php\template\admin\clasess\db.php on line 22```
اینم کد های فایل db.php
```<?php
namespace der;
class db{
private $pdo;
private $tbl;
private $user;
private $password;
private $server;
private $dbname;
public function __construct($server='localhost',$dbname='tcode',$user='root',$password='')
{
$this->dbname = $dbname;
$this->server = $server;
$this->password = $password;
$this->user = $user;
$this->connect();
}
public function connect(){
try{
return $this->pdo=new PDO("mysql:host={$this->server};dbname={$this->dbname}","root",'');
}catch(Exception $e){
echo '<h1>مشکلی در اتصال به دیتابیس وجود دارد</h1>';
}
}
public function setTbl($tbl){
$this->tbl=$tbl;
}
}
?>```
اگه میشه کمی در مورد مشکل هم توضیح بدین که یاد بگیرمببینید کامپوزر یه قابلیت اصلی داره به نام autoload که میاد تمام کلاس های تحت نیم اسپیس رو برای شما به صورت خودکار لود میکنه.
از اونجایی که شما از کامپوزر استفاده نمیکنید، روبرو شدن با خطای "Class 'der\PDO' not found" بدیهیه.
چون نمیتونه کلاس رو پیدا کنه.
در چنین حالتی باید یه تابع ساده شبیه زیر داشته باشی که این کار رو بکنه:
function __autoload($className)
{
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strripos($className, '\\')) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
// $fileName .= $className . '.php'; //sometimes you need a custom structure
//require_once "library/class.php"; //or include a class manually
require $fileName;
}
اما توجه داشته باشید، که این روش گاهی هم ممکنه با خطا روبرو بشه. راهکار اصلی استفاده از Composer هست.
در دنیای مدرن برنامهنویسی PHP استفاده از Composer لازم و حیاتیه. میشه گفت تمام فریمورکها ازش استفاده میکنند و تمام پکیج های PHP هم همینطور
@ali.bayat
سلام ببخشید منظور منو اشتباه متوجه شدین
من از namespace استفاده میکنم ولی ارور میده نمیدونم چرا؟ارورش هم ذکر کردم
شاید پاسخ شما همینجا باشد
@ali.bayat
اقای بیات ممکنه کلا از کامپوزر استفاده نکرده باشن چون ذکر نکردن از چی استفاده کردن و با این ارور مواجه شدن
@rezi
در اون صورت که علت ارور ها هم میتونه همون باشه
rezi@
@ali.bayat
بصورت دستی include زدم
@ali.bayat
من میخام بدون کامپیوسر استفاده کنم فعلا ، چرا ارور میده؟
@paressep28
نباید اروری بده در اصل شما اینکلود کن
و به این صورت آبجکتی از اون کلس ایجاد کن
include 'db.php';
$db = new der\db();