17 Nisan 2010 23:48 tarihinde Erkin Tek <[email protected]> yazdı:

> Mantığını da yazar mısınız?
>
> Yani böyle atraksiyonlar ancak sonradan koda dahil olanların canını
> sııkar. Misal autoloading en lanet ettiğim işlerden biri. eden böyle
> class isimlerini değiştirmeye ve başka programcıları yanıltmaya ihtiyaç
> duyarsınız ki.
>

Aslına bakarsan bu hack'i yapabilirsem sanırım projeye sonradan dahil olacak
arkadaşların hoşuna gideceğini sanıyorum. aşağıda biraz açıklayacağım üzere
bu hack daha sonra yazacağımız kodlarda mantıklı bir yapı kurabilmeyi
sağlayacak. Misal ben autoloading i seviyorum çünkü en azından kendi
classloader'ımı yazıp class larımı mantıklı dizinler içerisinde
sınıflandırabiliyorum. bilmiyorum, ben javasever bir insanım. belki de php
yi ona benzetebildiğim için bu trick leri seviyorumdur.


> Muhtamelen bir kod içinde kullanılıyo class, siz de yeni özellikler
> eklemek istiyorsunuz. Ama hardcode class ismi olduğundan yeni
> classınızı araya alamıyorsıunuz.
>

 Eğer öyle olsa idi sizinde dediğiniz gibi eski isimleri değişitip extend
etmek makül olurdu.


> 1. Demekki bu uygulama eksik veya özürlü, yeni kod yapısına uygun
> değil. O yüzden hacklenmeye mubah. Eski class ismini classOld gibi
> bişyle değiştiririp yeni class'ı eskiyi override ederek yazardım.
>

yazdığım uygulamaya sıfırdan başladım. özürlü veya eksik olacaksa bunun
sorumluğunu kabul ediyorum.
ancak ben özürlü olanın php olduğunu düşünüyorum. zira sürüm 4'den beri
kör-topal oop desteği sağlamasına rağmen namespace kavramını 5.3 ile beraber
sağlıyor ki dayattıkları namespace mantığını şık bulan birisiyle henüz
karşılaşmadım.

aslına bakarsan bu projede ihtiyacım olan şey tam olarak namespace. ben php
5.2.x kullanıyorum. işyerim ve kodun çalışacağı diğer ortamlarda da php
5.2.x mevcut. uzun bir süre böyle kalacağını düşünüyorum. bu nedenle php nin
pekte hoş bulmadığın namespace ini kullanamıyorum.

--Proje
---- Müzisyenler
-------- Şarkıcı
------------ popSoyle.class.php ==> class popSoyle{}
------------ rockSoyle.class.php ==> class rockSoyle{}
------------ selamSoyle.class.php ==> class selamSoyle{}
-------- Davulcu
------------ darbukaCal.class.php ==> class darbukaCal{}
------------ davulCal.class.php ==> class davulCal{}
------------ selamSoyle.class.php ==> class selamSoyle{}

gibi bir dizin yapım var. uygulama bir konsol uygulaması. ilk çalıştığı anda
bu dizin yapısını tarayarak tüm class ları include ediyor. birden fazla
modül(şarkıcı, davulcu gibi) aynı isime sahip sınıf barındırabileceği için
bu ihtiyacım ortaya çıktı. açıkcası include işleminde yüklenen sınıfı,
mesela Şarkıcı altındaki selamSoyle.class.php yüklendiği anda sınıf adını
Şarkıcı_selamSoyle gibi bir isimle değiştirmek.

bu şekilde şarkıcı modülünü geliştirecek olan yazılımcı hala new
selamSoyle() diyebilecek ve bu davulcu modülünü geliştiren programcının new
selamSoyle() demesini engellemicek. bu sayede bu dizin yapısını javadaki
paket yapısına benzetebilirim ve iki farklı modülü geliştiren iki ayrı insan
kendi "package scope" unda güvenli bir şekilde çalışabilir.

yani temel olarak kimseye hissettirmeden namespace kavramını basitçe
implement etmeye çalışıyorum.



2. UIygulamada eski class yerine tüm yenileri (find&replace)
> extendedClass ile değiştirir ve öyle yazardım ben olsam.
>
> 3. Sizin dediğiniz yöntemi sadece patron isterse yapardım.
>

peki, o halde nasıl yapardım diye sorayım ? ve tabi diğer liste üyelerine.


>
> On Saturday 17 April 2010 10:49:15 pm Mehmet Gürevin wrote:
> > hayır, benim derdim sınıf adı ile.
> >
> > yani
> >
> > class foo{
> >     function bar(){
> >         return 'for bar';
> >     }
> > }
> >
> > gibi bir kod bloğunu php okuduğu zaman bu sınıfı belleğe almış
> oluyor. biz
> > bundan new foo() ile nesne yaratabiliyoruz.
> > ben istiyorum ki bu sınıfı belleğe alsın, bende gideyim bu sınıf
> > bellekteyken sınıfın adını değiştireyim. mesela sınıf adını alican_foo
> > yapayım ve ondan sonra örneklerken new alican_foo() diyeyim.
> >
> > 17 Nisan 2010 22:40 tarihinde Canberk BOLAT
> <[email protected]> yazdı:
> > > class foo {
> > > public $x = "zoo";
> > > }
> > >
> > > $a = new foo();
> > > $b = $a;
> > > echo $b->x."\n";
> > >
> > >
> > > gibi bir kullanımdan mı bahsediyorsun yanlış anlamadıysam?
> > >
> > > 17 Nisan 2010 21:20 tarihinde Mehmet Gürevin
> <[email protected]>
> > >
> > > yazdı:
> > > > Merhaba,
> > > > class foo{}
> > > > redefineClass('foo', 'bar');
> > > > new bar();
> > > > yukarıdaki redefineClass işlevini yerine getircek birşeyler
> > >
> > > biliyormusunuz ?
> > >
> > > > classkit eklentisi ile fonksiyonların isimlerini değiştirebiliyorum
> > > > ancak class isimleri üzerinde çalışan bir yordamını bulamadım.
> > > > runkit ile yapılabildiğini okudum ancak oda php 5.2 ve üzerinde
> > >
> > > çalışmıyor.
> > >
> > > > dahası iki kütüphanede geliştirilmeyeli yıllar olmuş.
> > > > bu sorunu adını değiştirmek istediğim class ı include etmek
> yerine
> > > > okuyup string manipülasyonu ile adını değiştirip örnekleyerek
> > > > yapabiliyorum
> > >
> > > aslında
> > >
> > > > ama temiz ve güvenilir değil.
> > > > php kadar dinamik bir dil ile bunu yapabiliyor olmam lazım
> sanırım.
> > > > kolay gelsin..
> > > > ____________________________
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> https://liste.linux.org.tr/mailman/listinfo/linux-programlama
> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap