v2.5.2
Giriş yap

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

coder
284 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
303 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
303 gün önce

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

ebykdrms
303 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
303 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
303 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;
?>