PHP dil engeli tasarım sorunu

2 Cevap php

Background

Ben uzaktan hizmetlerin çeşitli (Yerel, FTP, WebDAV, SVN, SSH) dosya sistemi erişimi kolaylaştırmak olacaktır yardımcı sınıflar kümesi tasarım gerekir, ve ben çoğunlukla bir dilin bir "mükemmel" bir tasarım almak gibi olamaz bariyer - PHP belirli bir özellik için destek yoktu çünkü ben seçtim her tasarım yol kazınmış olduğunu hissediyorum.

Ben bu sinir bozucu buluyorum ve ben fikir bitti.

Requirements

FileSystem için bir üs soyut bir sınıf veya arabirim her dosya sistemi tipi devralır. FileSystem sınıf (ve alt sınıfları var) böyle bir 'hareket' gibi temel FS işlemleri uygulamak 'sürücü', böylece, 'kaldır' oluşturmak 've.

Bu Sürücü işlemleri sınıfı kullanıcıya maruz kalmamalıdır, bunun yerine, FileSystem Ayrıca istek üzerine dosya bilgileri kayıtlarını alır bir fabrika.

Bir dosya da soyut bir sınıf veya arayüz File ve Directory, bir FileSystem altsınıfın uygulamacılarıdır olabilir veya olmayabilir alt sınıfı dayanmaktadır. Bir FileSystem sınıfının Kullanıcılar bir File (SshFile ve SvnFile aynı çalışması gerekir) türü hakkında değil 'bakım' yapmak.

File (ve Directory) sınıfı kullanıcı {[içinden elle yapmak mümkün olmadan bazı şekilde oluşturulan dosya sistemi sürücüsü konuşmak biri olmalıdır ( 2)]} sürücüsü.

What I have tried

Doğal olarak ben FileSystem soyut bir sınıf, daha sonra File sınıfı kod ilerledi ve PHP hiçbir friend desteğine sahip çıkıyor, yani {[(1)] yapılan } FileSystem 'nin korumalı sürücü yöntemlerine erişimi olamaz.

Kazınmış var Başka bir fikir, bir sınıf içinde bir sınıf oldu - FileSystem ve FileSystem::File - PHP sınıfları iç içe değil.

Divide FileSystem FileSystemDriver ve FileSystemFactory içine, ama aynı orijinal sorun haline beni alır.

300 Reputation points in bounty reward

Kapsülleme için gerekli programlama araçlardan PHP'nin olmaması için orijinal bir fikir bir çözücüye.

2 Cevap

Neden FileSystem gelen FileSystemDriver ayıramaz? Örneğin:

class SSHFileSystem {   
    private $driver = new SSHDriver();

    function getFile($path)
    {
    	return new SSHFile($this->driver, $path);
    }
}

Belgeler sorun değil, kod sorun.

Kamu ama onlar sadece iç Dosya ve Dizin nesneleri tarafından kullanılması gereken bir belge olarak Dosyasistemi yöntemlerini bırakın.

Bu dilde çok yaygındır. Python gibi büyü yöntemleri, ya _function gösterimi vardır

Ben bir kullanıcı değilim, ben sadece mevcut her yöntemi bakmak ve eğlenceli geliyor eğer kullanmaya başlamak, ben dokümanlar okumak ve ne dediklerini yapmıyoruz.