v2.5.2
Giriş yap

"Deprecated: str_replace(): Passing null to parameter" hatası

coder
274 defa görüntülendi

Herkese merhaba.
Aşağıdaki hatayı alıyorum, sorunu nasıl çözebilirim.

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in

PHP Sürümüm 8.2.13

<?php
$patterns = [
    '{url}' => '([0-9a-zA-Z]+)',
    '{id}' => '([0-9]+)'
];

$url = str_replace(array_keys($patterns), array_values($patterns), $url);

// Şu şekilde denedim ama yine aynı hatayı alıyorum.
$url = $url ? str_replace(array_keys($patterns), array_values($patterns), $url) : "";

Cevap yaz
Cevaplar (5)
tayfunerbilen
291 gün önce

@ebykdrms'de dedigi gibi, artik str_replace'de 2. parametrede null kullanimi kaldirildi, onun yerine bos string olarak degistirirsen problemin cozulecektir.

kisaca projendeki butun su sekilde olan kodlarini:

str_replace($needle, null, $haystack)

soyle degistirmen gerekiyor:

str_replace($needle, '', $haystack)

Gecen PHP'nin yeni surumune gecerken ben de ayni problemi yasadim, uzucu :D eger 3. parti kullandigin class'lar vs. varsa onlarda hata cikarabilir, onlara da bir el atman gerekebilir.

coder
291 gün önce

tayfunerbilen, ebykdrms, gokcin teşekkür ederim.

ebykdrms
292 gün önce

Passing null to parameter #2 ($replace) of type array|string is deprecated.
Yani, 2. parametreye null gelmesi PHP 8 ile artık kaldırıldı. Önceki sürümlerde null verilirse boş string olarak kabul ediliyordu muhtemelen.

Hatayı aslında şu satırda alıyorsunuz:
$request_uri = str_replace([$dirname, $basename], null, $_SERVER['REQUEST_URI']);

Burada null olan parametre array veya string olmalı. Şu şekilde düzeltilebilir:
$request_uri = str_replace([$dirname, $basename], '', $_SERVER['REQUEST_URI']);

Bunu yaptığınızda $_SERVER['REQUEST_URI'] içinde geçen $dirname veya $basename ifadelerininin silinmiş halini $request_uri değişkenine atayacaktır.

coder
292 gün önce

gokcin hocam url bir fonksiyon üzerinden geliyor.

Tam kodum şu şekilde.


<?php

$route = 0;

function parseUrl()
{
    $dirname = dirname($_SERVER['SCRIPT_NAME']);
    $dirname = $dirname != '/' ? $dirname : null;
    $basename = basename($_SERVER['SCRIPT_NAME']);
    $request_uri = str_replace([$dirname, $basename], null, $_SERVER['REQUEST_URI']);
    return $request_uri;
}

function run($url, $callback, $methods = 'get')
{
    
    $methods = explode('|', strtoupper($methods));

    if (in_array($_SERVER['REQUEST_METHOD'], $methods))
    {

        $patterns = [
            '{url}' => '([0-9a-zA-Z]+)',
            '{id}' => '([0-9]+)'
        ];

        $url = $url ? str_replace(array_keys($patterns), array_values($patterns), $url) : "";

        $request_uri = parseUrl();
        
        if (preg_match('@^' . $url . '$@', $request_uri, $parameters))
        {
            unset($parameters[0]);

            global $route;
            $route += 1;

            if (is_callable($callback)){
                call_user_func_array($callback, $parameters);
            } else {

                $explode    = explode('@', $callback);          // $callback'i controller ve method olacak şekilde parçala.
                $controller = explode('/', $explode[0]);        // controller klasöründe bulunan klasör içerisindeki dosya ismini alabilmek için parçala
                $controller = end($controller);                 // Dosya ismini al
                $method     = $explode[1];                      // Method ismi

                $controllerFile = CONTROLLERS_DIR . strtolower($explode[0]) . '.php';

                if (file_exists($controllerFile)) {

                    require $controllerFile;
                    controller($controller, $method, $parameters);

                }else{
                    echo $controller." dosyası bulunamadı!";
                }

            }

        }
    }

}


function notfound()
{
    global $route;
    if($route == 0)
    {
        header('Location: '.URL.'/404');
    }
}

Örnek run fonksiyonu kullanımı

run("/blog/goster/{id}","blog@tek_blog");
gokcin
292 gün önce
<?php
$patterns = [
    '{url}' => '([0-9a-zA-Z]+)',
    '{id}' => '([0-9]+)'
];

// Önce $url değişkenini tanımlayın veya güncelleyin
$url = "your_actual_url_here";

// Ardından yer tutucuları (placeholders) değiştirin
$url = $url ? str_replace(array_keys($patterns), array_values($patterns), $url) : "";

// Şimdi $url değişkeni, yer tutucuların uygun değerleriyle güncellenmiş olacak
echo $url;
?>