Onları geçen veya onları küresel yapmadan php fonksiyonları içinde mevcut nesne yapmak

2 Cevap php

Bu gereklilik sadece geliştiriciler ve güzel kod için sadelik içindir. Ben bir şablon sistemi inşa ediyorum ve ben gerçekten bir nesne değişkeni sadece tüm fonksiyonlarda var olmak, tıpkı senin gibi. İşte bazı kod:

Librarian.php:

$class = "slideshow";
$function = "basic";
$args = array(...);
$librarian = $this; // I WOULD LIKE THIS TO BE PRESENT IN CALLED FUNCTION

...

return call_user_func($class.'::'.$function, $args);

...

Slideshow.php:

public static function basic($args) {
    echo $librarian; // "Librarian Object"
}

Thanks! Matt Mueller

2 Cevap

Eğer kullandığınız bir işlevi olabilir:

public static function basic($args) {
    echo librarian();
}

// some other file
function librarian()
{
    global $librarian;
    // does some stuff
}

Bu şekilde sürekli her fonksiyon için küresel ifadesi eklemek zorunda kalmazsınız.

Ne demek olduğunu?

Ben bir Singleton kullanmak sanırım ama bu biraz global kategori içine düşecek.

class Librarian
{
    static $instance = null;

    function __toString()
    {
        return 'Librarian Object';
    }

    function foo()
    {
        return 'bar';
    }

    function singleton()
    {
        if (is_null(self::$instance))
        {
            self::$instance = new Librarian();
        }

        return self::$instance;
    }
}

function basic()
{
    echo Librarian::singleton(); // Librarian Object
    echo Librarian::singleton()->foo(); // bar
}

Ayrıca sınıfının dışında tekiz olabilir:

class Librarian
{
    function __toString()
    {
        return 'Librarian Object';
    }

    function foo()
    {
        return 'bar';
    }
}

function singleton()
{
    static $instance = null;

    if (is_null($instance))
    {
        $instance = new Librarian();
    }

    return $instance;
}

function basic()
{
    echo singleton(); // Librarian Object
    echo singleton()->foo(); // bar
}

Ne istediğiniz mümkün değil, en azından ben göremiyorum herhangi bir simple ya da bunu yapmak için elegant yoludur.