Class ile ilgili bir soru.

alicilinAli Fırat Güler

merhaba arkadaşlar. Bugün biraz değişik bir yöntem uygularken bir yerde tıkandım. Aklıma herzaman olduğu gibi sizlere sormak geldi.

iki adet classım var. Birinci class içinde ikinci classı $load isimli public bir değişkene tanımlıyorum. Fakat ikinci classın çalışması sonucunu birinci sınıfı içinde $this-> şeklinde kullanmak istiyorum. bunu yapmanın mantığı nedir. Eğer anlamadıysanız küçük bir örnek vereyim. Code igniter'in loader classı gibi düşünün. $this->load->model('index'); şeklinde kullanıyorsunuz fakat loaderin yüklediği modeli $this->model olarak kullanabiliyorsunuz. 

2014-07-26 06:16:09

Php

badyguard14Hilmi BORAN

Merhaba,

Sorunuzu ve örneğinizi biraz daha açabilirseniz daha kolay yardımcı olabilir.Kendi anladığım kadarına cevap vereyim;
sınıfın kendi içinden ya da dışından yeni bir sınıfı set işlemi yapabilirsin


class a{
public $model;

public function model($model){
$this->model=new $model;
}

public function init(){
/*içerden kullanım*/
$this->model("something");
$this->model->{other prop or methods};
}
}

/*dışardan kullanım*/
$a=new a;
$a->model("something");
$a->model->{other prop or methods};
2014-07-26 13:45:11 Edit:2014-07-26 13:48:01

Php

alicilinAli Fırat Güler

Bu yöntemi zaten kullanıyorum. Class konusunda acemi değilim hocam :) Benim demek istediğim şu ben bir class içinde bir diğer classı bir değişkene tanımlayacağım fakat ikinci sınıf birinci sınıfın içine eleman ataması yapabilecek. Tıpkı code igniter'in load classı gibi.

İkinci sınıf birinci sınıfın içerisine direk $this->eleman şeklinde kullanılabilecek bir eleman atayabilmesi. Sorun burda yani. $this->model->eleman şeklinde kullanmak değil.

2014-07-26 17:19:04 Edit:2014-07-26 17:20:11

badyguard14Hilmi BORAN

CodeIgniter'da ki load methoduna baktım daha önce buna benzer birşey yapmıştım.Ama istediğiniz şeye uygun mudur bilemem;


class ClassLoader{
private $_baseInstance;

public function __construct(&$baseInstance){
$this->_baseInstance=$baseInstance;
}

public function load($name){
$this->_baseInstance->{$name}=new $name;
}

}

class ASample{
protected $loadATemp=array();
public $loader;

public function __construct(){
$this->loader=new ClassLoader($this);
}

public function __set($name,$value){
$this->loadATemp[$name]=$value;
}

public function __get($name){
if (array_key_exists($name, $this->loadATemp)) {
return $this->loadATemp[$name];
} else {
return null;
}
}

}

Kullanırken:

$sample=new ASample();
$sample->loader->load("aModel");

$sample->aModel->{aModel class in props or methods};

Aklıma gelen bu başka bir yöntem şuanlık düşünemedim :) Umarım yardımcı olabilmişimdir.

Not : Burda direkt sınıfın ismini değişkene set işlemi yapıldı, ikinci parametre ile igniterdaki gibi istediğin isimlendirmeye set yapılabilir.

2014-07-27 09:04:27

Edit:

Php

alicilinAli Fırat Güler

hay akılınızla bin yaşayın hocam. ben nasılda akıl edemedim bunu. Çok teşekkürler. Şimdi oldu. çok çalışmaktan kafa duruyor bir süre sonra :) Halbuki bütün olay "&" şunu koymakta bitiyor. Allah deli canımı almasın benim yaa.

2014-07-27 18:48:54 Edit:2014-07-27 19:30:27

phpkodlari.com © 2009 Herkes Php öğrenecek
Eglence ve Oyun: Gamikro