2010-07-02 18 views
10

Nesnenin niteliğini PHP'de belirtmenin bir yolu var mı? Değilse o PHP'nin gelecekteki bir sürümüne biri, bir günde mümkün olacaktır eğer biliyor musunuzPHP'de nesnenin türünü belirtme yolu

class foo{ 
public bar $megacool;//this is a 'bar' object 
public bar2 $megasupercool;//this is a 'bar2' object 
} 


class bar{...} 
class bar2{...} 

: Örneğin , şöyle bir şey olurdu?

cevap

10

Zaten belirtilmiş olan TypeHinting'e ek olarak, özelliği, örn.

class FileFinder 
{ 
    /** 
    * The Query to run against the FileSystem 
    * @var \FileFinder\FileQuery; 
    */ 
    protected $_query; 

    /** 
    * Contains the result of the FileQuery 
    * @var Array 
    */ 
    protected $_result; 

// ... more code 

@var annotation

Kod Destek sağlayacak bazı IDE yardımcı olacaktır.

+0

Güzel bir alternatif, dokümantasyon için mükemmel. –

2

Hayır. İşlev parametreleri için type hinting'u kullanabilirsiniz, ancak bir değişken veya sınıf niteliğinin türünü bildiremezsiniz.

6

Aradığın şey, Tip Hinting olarak adlandırılır ve PHP 5/5.1'den beri işlev bildirimlerinde kısmen kullanılabilir, ancak sınıf tanımında kullanmak istediğiniz şekilde değil.

<?php 
class MyClass 
{ 
    public function test(OtherClass $otherclass) { 
     echo $otherclass->var; 
    } 

ama bu değil:

Bu işleri

class MyClass 
    { 
    public OtherClass $otherclass; 

Ben en azından ben o planlanmaktadır farkında değilim, bu gelecek için planlanan sanmıyorum Ancak, nesnenize getter and setter functions kullanarak kendi tür denetim kurallarınızı uygulayabilirsiniz. Yine de, OtherClass $otherclass gibi zekice olmayacak. Bir ayarlayıcı-Yöntemin parametresi tip-ipucu ile var nesneyi enjekte edilirken

PHP Manual on Type Hinting

+1

Skaler Tipler için TypeHinting'in (henüz) mevcut olmadığı dikkate alınmalıdır. – Gordon

+0

@Gordon: Doğru. Fakat tabi ki, yöntem içinde kısa bir iflas durumunda belirli bir türü kontrol edebilirsiniz. Ve eğer memnun olmazsa, verilen parametre ile bir istisna atarsınız. –

+0

@faileN evet, [is_scalar()] gibi bir şey (http://de3.php.net/manual/en/function.is-scalar.php) veya herhangi bir özel is_ * işlevi. – Gordon

0

Eğer, nesne türü belirtebilir. Bunun gibi:

class foo 
{ 
    public bar $megacol; 
    public bar2 $megasupercol; 

    function setMegacol(bar $megacol) // Here you make sure, that this must be an object of type "bar" 
    { 
     $this->megacol = $megacol; 
    } 

    function setMegacol(bar2 $megasupercol) // Here you make sure, that this must be an object of type "bar2" 
    { 
     $this->megasupercol = $megasupercol; 
    } 
} 
+0

Bu şekilde bir yönteme aşırı yüklenmenin mümkün olduğunu bilmiyordum. Güzel. – Cedric

İlgili konular