sorunları __toString

1 Cevap php

Biraz MVC sistemi (öğrenme) inşa ediyorum ve benim görünümü dosyaları değişkenleri gösteren bazı sorunlar var.

Bu benim görüntüle sınıftan olduğunu:

private $vars = array();

    public function __set($key, $value)
    {
        $this->vars[$key] = $value;
    }


    public function __get($key)
    {
        return $this->vars[$key];
    }

    public function __toString()
    {
        return $this->vars[$key];
    }

    public function show($file)
    {
        global $router;
        $folder = strtolower($router->current_controller);

        $path = VIEWPATH.$folder.'/'.$file.'.phtml';
        if ( ! file_exists($path))
        {
            die("Template: $file, not found");
        }
        include ($path);
    }

Ve burada benim denetleyicisi dan:

$test = new View();
$test->name = 'karl';
$test->show('name_view'); 

Ve görünüm dosyası (name_view)

echo $name // doesn't work
echo $this->name // Works

Ben yanlış ne yapıyorum? Belki de ben bir şey küresel yapmak Haft?

THX / Tobias

EDIT: Ben görünümü dosya eklemek için önce ben sadece görünümü sınıfı sağ vars dizi ayıklanır ve sonra o amele .. Tüm yardım için teşekkür ederim.

1 Cevap

There is no $key in __toString()!

Ayrıca __ toString () herhangi bir parametre kabul etmez!

Bu ile test edin:

public function __toString()
{
    return json_encode($this->vars);
}


Düzenlemeden sonra ben senin sorunun (bunu kullanarak değil çünkü sadece bunu silebilirsiniz) __ toString () yöntemi olmadığını fark etti. echo $this->name Senin durumunda sizin bakış içeriden değişkenleri göstermek için doğru yolu sadece yapmak istiyorsanız ancak echo $name Ben farklı bir yaklaşım önerebilir, yapıyor?

function View($view)
{
    if (is_file($view) === true)
    {
    	$arguments = array_slice(func_get_args(), 1);

    	foreach ($arguments as $argument)
    	{
    		if (is_array($argument) === true)
    		{
    			extract($argument, EXTR_OVERWRITE);
    		}
    	}

    	require($view);
    }
}

Böyle Görünüm işlevini kullanın:

$data = array
(
   'name' => 'karl',
);

View('/path/to/your/name_view.phtml', $data);

Şimdi sadece isterseniz echo $name;, sizin görüntüle sınıfa uyarlayabilirsiniz yaparak çalışması gerekir. Bu işe yaramazsa, .php için name_view görünüm uzantısını değiştirmeyi deneyin.