aghabalaguluzade Ben ne yapmak istediğinizi anlıyorum ama bu yazdığınız kod her ne kadar PHP 8.3'de çalışsa da aslında PHP 4 kodu. Temel bilgilerinizi tamamlayın ama PHP 8.x ile tamamlayın.
Şu aşamada Composer kullanmadan PHP yazmanın bir anlamı yok. Nasıl ki Javascript'in npm'i, Go'nun Module'leri varsa PHP'nin de vazgeçilmez Composer'ı var. Mesela myproject isimli bir klasör oluşturup içinde composer init
yapın, Composer o klasörü PSR-4 uygun halde sizin için hazırlayacak ve src klasöründe modern PHP kullanabileceksiniz.
Bu PSR-4 nedir, autoloading nedir öğrenmek, kendiniz yapmak istiyorsanız:
https://www.php.net/manual/en/function.spl-autoload-register.php
https://www.php-fig.org/psr/psr-4/
Diğer bir nokta da <?php etiketleri. Kesinlikle <?= şeklinde kısaltma kullanmıyoruz, <?php ... ?> şeklinde kullanıyoruz ve eğer dosya tamamen bir PHP dosyası ise (bir sınıf mesela) ?> ile bitirmiyoruz ve en son 1 satır boş bırakıyoruz. Dosyanın dil kodlamasının da UTF-8 olduğundan emin olun. IDE'ler bunları otomatik yaptığı için özellikle IDE olmadan Windows kullananlar bu hataları çok yapıyor.
Şimdi Composer alt yapımız hazırsa, PSR-4 hazırsa demek ki artık modern PHP ile OOP kodlama yapabiliriz. Bu durumda mesela src/Core/Router.php isimli bir dosya ve sınıf oluştururak bu router mantığını modern bir şekilde halledebilirsiniz. Mesela başlangıç için:
src/Core/Router.php
<?php
declare(strict_types=1);
class Router {
private array $routes = [];
public function __construct(?string $currentPath = null) {
$this->currentPath = $currentPath ?? $_SERVER['REQUEST_URI'];
}
public function get(string $path, callable $callback): void {
$this->routes['GET'][$path] = $callback;
}
public function post(string $path, callable $callback): void {
$this->routes['POST'][$path] = $callback;
}
public function run(): void {
$requestMethod = $_SERVER['REQUEST_METHOD'];
$path = $this->currentPath;
$route = $this->routes[$requestMethod][$path] ?? null;
if (is_callable($route)) {
$route();
} else {
echo "404 - Sayfa Bulunamadı";
}
}
}
public/index.php
require __DIR__.'/../vendor/autoload.php';
$router = new Router();
$router->get('/', fn() => echo "Ana Sayfa");
$router->get('/hakkimizda', fn() => echo "Hakkımızda Sayfası");
$router->post('/iletisim', function() {
// İletişim formu gönderme işlemleri
});
$router->run();
vs...
Eğer bu şekilde öğrenip ilerlemezseniz kodunuza bakıp "P*p ölmedi mi yhaa" diyen insanlarla çok karşılaşırsınız, benden söylemesi 🙂