Tam olarak ne geç-statik PHP bağlayıcıdır?

6 Cevap php

Tam olarak ne geç-statik PHP bağlayıcıdır?

6 Cevap

PHP 5.3.0 ve PHP statik miras bağlamında denilen sınıf başvurmak için kullanılır geç statik bağlama adı verilen bir özelliği uygular.

Başlangıçta zamanında denirdi sınıfına başvuran bir anahtar kelime getirerek bu sınırlama çözmeye Geç statik bağlayıcı çalışır. Bu yeni bir anahtar kelime tanıtmak değil, kullanmak static zaten ayrıldı karar verildi.

İbret Görelim:

<?php
    class Car 
    {
        public static function run() 
        {
            return static::getName();
        }

        private static function getName() 
        {
            return 'Car';
        }
    }

    class Toyota extends Car 
    {
        public static function getName() 
        {
            return 'Toyota';
        }
    }

    echo Car::run(); // output: Car
    echo Toyota::run(); // output: Toyota.
?>

late static bindings son "non-yönlendirme çağrısı" adlı sınıfını saklayarak çalışır. Statik yöntem çağrıları durumunda, bu açıkça (:: operatörünün solunda genellikle bir) adlı sınıfıdır; non statik yöntem çağrıları durumunda, bu nesne sınıfıdır.

Bir "yönlendirme çağrı" self::, parent::, static::, ya da, sınıf hiyerarşisinde yukarı gidiş, {[(tarafından tanıtıldı statik biridir 3)]}.

Fonksiyonu get_called_class() denilen sınıfın adı ve static:: kapsamını tanıttı bir dize almak için kullanılabilir.

Kesinlikle PHP kılavuzda Late Static Bindings okumak gerekir. Ancak, hızlı bir özetini vermeye çalışacağım.

Temelde, self anahtar kelime miras kuralları takip etmez aslında aşağı kaynar. self her zaman kullanıldığı sınıfa giderir. Bu bir üst sınıfta bir yöntem yapmak ve bir çocuk sınıf onu ararsanız size beklediğiniz gibi, self çocuğu başvuru anlamına gelir.

Geç statik bağlayıcı özellikle bu eksikliğin giderir static anahtar kelime için yeni bir kullanım sunuyor. Eğer kullandığınız zaman static, ilk önce kullanmak sınıfını, yani temsil eder. Bu çalışma zamanı sınıf 'bağlar'.

Bunlar arkasında iki temel kavram vardır. Yol self, parent ve static oyun olduğunda static çalışabilir ince olabilir, bu yüzden ziyade, daha ayrıntılı için gitmek Ben kesinlikle el ile sayfa örneklerini incelemek tavsiye ederim. Her anahtar kelimenin temellerini anlamak sonra, örnekler almak için gidiyoruz ne sonuçlar tür görmek için oldukça gereklidir.

Bunun için bir doc var:

PHP: Late Static Bindings

Örneğin:

abstract class Builder {
    public static function build() {
        return new static;
    }
}

class Member extends Builder {
    public function who_am_i() {
         echo 'Member';
    }
}

Member::build()->who_am_i();

There is not very obvious behavior: Following code produces 'alphabeta'

class alpha {       
    function classname(){
        return __CLASS__;
    }         
    function selfname(){
        return self::classname();
    }        
    function staticname(){
        return static::classname();
    }    
}

class beta extends alpha {            
    function classname(){
        return __CLASS__;
    }   
}

$beta = new beta();
echo $beta->selfname();
echo $beta->staticname();

Biz beta sınıftan classname fonksiyonu bildirgesini kaldırmak Ancak, biz sonucu 'alphaalpha' alırsınız.

Bu bağlantı beni bağlayıcı geç statik kavramını temizlemek yardımcı.

http://www.lornajane.net/posts/2009/php-5-3-feature-late-static-binding