Nesne Erişimi


    × Bunları biliyor muydunuz?
"Başlangıç kontrolcüsü tanımlayarak bu kontrolcüde yer alan kodların diğer tüm kontrolcüler için geçerli olmasını sağlayabilirsiniz."


ZN Framework'te nesnelere (Library, Model, Controller, Command) genellikle static türde erişim sağlanır. Bunun yanında farklı olarak bir kaç yol daha mevcuttur. 

 

 

# Bölüm Başlıkları


# Statik Erişim

# Statik Dönüşüm

# Sınıf İçi Erişim

# Görünümlerde Erişim [5.8.4]

# Parametrik Erişim [5.7.7]

# Görünümlerde Erişim

 

 

# Statik Erişim


ZN Framework'ün tüm kütüphanelerine statik formda erişilir. Bu yöntemle erişimde herhangi bir kısıtlama yoktur. Erişilecek sınıfların OOP kuralı olarak namespace (isim alanı) içeren sınıflar içerisinde eğer aynı isim alanına sahip değilse çağrımdan önce mutlaka use ile namespace tanımlamasının hemen altında belirtilmelidir. Aksi halde "Class 'ClassName' not found" gibi bir hata ile karşılaşırsınız.

Dosya: Controllers/Home.php
<?php namespace Project\Controllers;

use DB;

class Home extends Controller
{
    public function main()
    {
         output( DB::persons()->result() );
    }
}
Statik Dönüşüm

Kişisel olarak geliştirdiğiniz statik olmayan sınıflara statik erişim sağlayabilmek için ZN Framework 2 farklı yol sunar;

Sınıf isimlerinin internal ön eki ile belirtilmesi.
Facade sabitinin kullanımı.

internal Ön Eki

Oluşturacağınız sınıfın ismini internal ön eki başlayacak şekilde belirtirseniz sınıfının bir statik görünümü oluşur. Bu statik görünüm ilgili projenin Resources/Statics/ dizinine oluşturulur. İsim alanı (namespace) kullanımı statik erişimi engellemez. 

Dosya: Libraries/MyClass.php
<?php 

class InternalMyClass
{
    public function run()
    {
         # Your codes...
    }
}

Yukarıdaki tanımlamadan sonra sınıfınızı aşağıdaki gibi kullanabilirsiniz.

Dosya: Controllers/Home.php
<?php namespace Project\Controllers;

use MyClass;

class Home extends Controller
{
    public function main()
    {
         echo MyClass::run();
    }
}

MyClass::run() yöntemi statik olarak tanımlanmamasına rağmen bu yönteme erişim statik olarak gerçekleştirilmiştir.

Facade Sabiti [5.7.9]

Oluşturacağınız sınıf bir const facade = 'ClassName' tanımlaması içerirse bu sınıfınızın statik (cephe) görünümü oluşur. Bu kullanımda statik görünüm ilgili sınıfın bulunduğu dizine Facade son eki almış hali ile oluşturulur.

Uyarı: Facade sınıf ile orijinal sınıf farklı isim alanına (namespace) sahip değilse her iki sınıf için aynı ismi kullanmamaya dikkat ediniz.
Dosya: Libraries/MyClass.php
<?php 

class MyClass
{
    # İsim alanı içermeyen veya aynı isim alanına sahip sınıflar için
    # Facade sınıf isminin farklı olmasına dikkat ediniz.
    const facade = 'My'; 

    public function run()
    {
         # Kodlarınız ...
    }
}

Yukarıdaki tanımlamadan sonra sınıfınızı aşağıdaki gibi kullanabilirsiniz.

Dosya: Controllers/Home.php
<?php namespace Project\Controllers;

use My;

class Home extends Controller
{
    public function main()
    {
         echo My::run();
    }
}
Öneri: Bizim tercihimiz orijinal sınıf adında değişlik gerektirmediği için facade sabiti kullanarak statik erişim sağlamanız yönündedir.

Tanımlamalar Arasındaki Fark

Yukarıdaki tanımlamaların her ikisi de bir statik olmayan bir sınıfa statik olarak erişebilmeyi sağlamasına rağmen arlarında bazı farklar vardır. Bu farklılıklar kullanıma yönelik olmasa bile bilinmesi gereken önemli farklardır.

  internal Facade
Dosya İsmi Sınıfın adı değişir. Sınıfın adı değişmez.
İsim Alanı (Namespace) İsim alanı kullanımından etkilenmez. İsim alanı kullanımından etkilenir.
Dosya İsimlendirmesi internalSınıfAdı.php formunda isimlendirilir. SınıfAdıFacade.php formunda isimlendirilir.
Dosya Konumu Resources/Statics/ Orijinal sınıf ile aynı konumda yer alır.

 

 

# Sınıf İçi Erişim


ZN Framework'te sınıflara statik erişebileceğiniz gibi kontrolcüler içerisinde $this nesnesi ile de erişebilirsiniz. Erişmek istediğiniz sınıfın isim alanı içermesi $this nesnesi ile erişime engel olmaz. Yani isim alanını belirtmeye gerek kalmadan sadece sınıf adını kullanarak erişim sağlayabilirsiniz. OOP kuralı olarak $this iler erişimde sınıfların use ile isim alanı altında tanımlanmasına gerek yoktur.

Dosya: Controllers/Home.php
<?php namespace Project\Controllers;

class Home extends Controller
{
    public function main()
    {
         output( $this->my->run() );
    }
}
Görünümlerde Erişim [5.8.5]

Şablon sihirbazı kullanılan görünümlerde $this nesnesine erişim sağlayabilirsiniz.

Dosya: Views/Home/main.wizard.php
{{ $this->my->run() }}
Uyarı: Bu kullanım sadece şablon sihirbazı kullanılan görünümler için geçerlidir.

 

 

# Parametrik Erişim [5.7.7]


Kontrolcü yöntemlerinin parametrelerine nesne enjekte ederek erişim sağlayabilirsiniz.

Dosya: Controllers/Home.php
<?php namespace Project\Controllers;

use My;
use DB;

class Home extends Controller
{
    public function main(My $my, DB $db)
    {
         output( $my->run() );
    }
}
Görünümlerde Erişim

Parametre ile oluşturulan sınıf örneklerine aynı değişken isimleri ile görünümlerde erişebilirsiniz.

Dosya: Views/Home/main.wizard.php
{{ $my->run() }}