سلام من وقتی از 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 هم همینطور
درود. نیم اسپیس رو میتونید مثل ساختار فولدرها در نظر بگیرید... تصور کنید شما ۲ تا فایل App.php دارید در فولدرهای مختلف.
هنگام استفاده از این فایل ها هنگامی که کامپوزر فایل هارو برای شما لود میکنه، اگر هر فایل نیم اسپیس خپدش رو داشته باشه براحتی در دسترس و قابل استفادست
@ali.bayat
سلام ببخشید منظور منو اشتباه متوجه شدین
من از namespace استفاده میکنم ولی ارور میده نمیدونم چرا؟ارورش هم ذکر کردم
Error: Class 'der\PDO' not found
یا جایی در واردکردن نیم اسپیس ها اشتباهی رخ داده و یا تنظیمات composer.json بدرستی سِت نشدند.
همچنین اگر نیم اسپیس رو در composer.json تغییر بدید باید از دستور زیر هم استفاده کنید
composer dump-autoload
@ali.bayat
اقای بیات ممکنه کلا از کامپوزر استفاده نکرده باشن چون ذکر نکردن از چی استفاده کردن و با این ارور مواجه شدن
مشکل از همین جاست.
باید در فدلدر روت پروژه تون از کامند زیر استفاده کنید
composer init
یه سری سوال میپرسه و یه فایل composer.json درست میکنه. سپس در قسمت autoload و بعدش PSR-4 باید نیم اسپیس رو اضافه کنید.
"autoload": {
"psr-4": {
"App\\": "app/"
}
},
@paressep28
نباید اروری بده در اصل شما اینکلود کن
و به این صورت آبجکتی از اون کلس ایجاد کن
include 'db.php';
$db = new der\db();
ببینید کامپوزر یه قابلیت اصلی داره به نام 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 هم همینطور
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟