Normal ve sihirli ayarlayıcıları ve alıcılar arasındaki fark

4 Cevap php

Benim oturum değişkenleri için sihirli bir alıcı / ayarlayıcı sınıfını kullanıyorum, ama ben normal bir ayarlayıcıları ve alıcılar arasında herhangi bir fark görmüyorum.

Kodu:

class session
{
    public function __set($name, $value)
    {
        $_SESSION[$name] = $value;
    }

    public function __unset($name)
    {
        unset($_SESSION[$name]);
    }

    public function __get($name)
    {
        if(isset($_SESSION[$name]))
        {
            return $_SESSION[$name];
        }
    }
}

Şimdi ben fark ilk şey, ben bu konuda 'sihirli' değişken, hiçbir şey kaldırmak için $session->_unset('var_name') çağırmak zorunda olmasıdır.

Ben kullanmaya çalıştığınızda İkincisi zaman $session->some_var Bu işe yaramazsa. Ben sadece $_SESSION['some_var'] kullanarak oturum değişkeni alabilirsiniz.

Ben PHP kılavuzuna baktım ama işlevleri benim gibi aynı görünüyor.

Ben yanlış bir şey yapıyor, ya da bu işlevler konusunda sihirli bir şey değil gerçekten var duyuyorum.

4 Cevap

Aradığınızda ilk sayısında,

unset($session->var_name);

Bu çağrı ile aynı olması gerekir

$session->_unset('var_name');

İlgili __ get () kullanmak mümkün değil; Ne işe yaramazsa? Ne değişken set olsun ve neye uyarılar verilir. Eğer error_reporting() E_ALL ayarlanmış olduğundan emin olun.

Ayrıca session_start denilen kontrol etmek iyi bir fikir olabilir

Ben alıcılar ve belirleyiciler sınıf içinde değişkenler için sanıyordum?

class SomeClass {
    private $someProperty;

    function __get($name) {
        if($name == 'someProperty') return $this->someProperty;
    }

    function __set($name, $value) {
        if($name == 'someProperty') $this->someProperty = $value;

    }
}


$someClass = new SomeClass();
$someClass->someProperty = 'value';
echo $someClass->someProperty;

?

class session { /* ...as posted in the question ... */ }

session_start();
$s = new session;
$s->foo = 123;
$s->bar = 456;
print_r($_SESSION);

unset($s->bar);
print_r($_SESSION);

baskılar

Array
(
    [foo] => 123
    [bar] => 456
)
Array
(
    [foo] => 123
)

Ok, maybe not "magical". But works as intended.
If that's not what you want please elaborate...

Bu sihirli işlevi hakkında kadar şimdi benim anlayış

Ben yanlışım varsa lütfen beni düzeltin ...

$SESSION is an array and not an Object therefore you can access them using $session['field'] and not $session->field

{[(0)] olarak}

fnNameNewField ($ değer);

bu yüzden, bu anahtar gibi YeniBilesen ayrılacak ve fnName __ gönderilecek ve işlemleri yapabilme, bu yapılacaktır

eg: setNewId($value) will be sent to __set() with key= new_id and Parameters...