PHP: Interfejsy

0

Witam

Jestem programista Java, ale dostalem "pod stolem" małe zlecenie PHP i zabieram sie do rozplanowania.

Z tego co czytam programisci w swoich projektach rzadko uzywaja Interefjesów (albo rzadziej niz programisci innych jezykow)

Czy jest ku temu jakis konkretny powod?

0

W Javie przynajmniej da się bezboleśnie rzutować.

1

W PHP programujesz, w Javie bawisz się w interfejsy, klasy itp. Kod co zajmie w PHP parę linijek, w Javie masz 3 klasy, i na kilkanaście linijek. Jak to by powiedział Burneika: Opierdalasz się.

3
bordeux napisał(a):

W PHP programujesz, w Javie bawisz się w interfejsy, klasy itp. Kod co zajmie w PHP parę linijek, w Javie masz 3 klasy, i na kilkanaście linijek. Jak to by powiedział Burneika: Opierdalasz się.

Programowanie jednofunkcyjne i obfuskacja kodu w czasie pisania? Spoko, Java też na to pozwala ;)

0

Wytłumaczenie jeśli ktoś mnie nie rozumie:
W PHP tworzenie tablicy asocjacyjnej:

<?php
$array[] = array(
		"id" =>1,
		"val" => "test"
	);
$array[] = array(
		"id" => 2,
		"val" => "test"
	);
$array[] = array(
		"id" => 3,
		"val" => "test"
	);
//14 linijek
?>

W Javie:

public class klaska {
	public class tabliczka {
		public int id;
		public String val;
		tabliczka(int v_id, String v_val){
			this.id = v_id;
			this.val = v_val;
		}
	}
	
	public void run(){
		List<tabliczka> tablica = new ArrayList<tabliczka>();
		
		tablica.add(new tabliczka(32, "test"));
		tablica.add(new tabliczka(32, "test"));
		tablica.add(new tabliczka(32, "test"));
		tablica.add(new tabliczka(32, "test"));
	
	}

}
// 22 linijki
4

Jak definiujesz osobną klasę do przechowywania pary <Integer, String> to nie mamy o czym rozmawiać. Zresztą jakiś kosmos odprawiasz, bo i w PHPie by się tak tego nie realizowało.

HashMap<Integer, String> map = new HashMap<Integer, String>() {{
   put(1, "Potter");
   put(2, "Weasley");
}};

Takie, kurde, trudne...

Jak już mamy dyskutować o zabawkach:

Player gimbus1 = new Player();
Player gimbus2 = new Player();

HashMap<Player, String> sth = new HashMap<Player, String>() {{
   put(gimbus1, "2f87fb97-edf6-4b73-b2c8-4180ebc26009");
   put(gimbus2, "172bb62c-27d7-449b-9b80-650d9dc8d9a5");
}};

Czekam na rozwiązanie w PHP. Przypominam że jako klucz przechodzą tylko typy skalarne (więc w wypadku PHP string, bool, int i float), a i to na każdym kroku zachodzi castowanie na chińskich zasadach.

0

Demonical Monk: To pokaż mi w Javie:

$array[] = array(
                "id" =>1,
                "val" => array("name"=>"cos", "vorname" => "cos2" , "data" => array(42, 424, 42,42 42,))
        );

Gdzie jest twój bóg teraz? Ile zdefiniujesz zmiennych, w ilu linijkach, by było czytelne?

Albo szybkie operowanie na tablicy, poprzez klucz string:

$tablica['one'] = array....;
4

No patrz, ja projektuję z sensem i nie wpieprzam id w środek wartości żeby efektywnie pozbyć się dobrodziejstw ułatwiających szybsze lookupowanie.

class Czlowiek {
   public String name;
   public String surname;
   public Integer[] jakiesBordeuxowePierdoly;

   public Czlowiek(String name, String surname, Integer[] jakiesBordeuxowePierdoly) {
        this.name = name;
        this.surname = surname;
        this.jakiesBordeuxowePierdoly = jakiesBordeuxowePierdoly;
   }
}
//...
HashMap<Integer, Czlowiek> map = new HashMap<Integer, Czlowiek>();
map.put(1, new Czlowiek("Piotr", "Kowalski", new Integer[]{42, 47, 439, 3943, 34892, 348cholerawieile}));

W przeciwieństwie do Ciebie nie spowoduję kureskiego undefined behaviour w przypadku po prostu zapomnienia o jakimś polu bo mi się to nie skompiluje. Jawna definicja tej struktury znacznie ułatwia ogarnięcie i zrozumienie jej, oprócz tego mojemu człowiekowi mogę dopisać funkcję do liczenia BMI bez tworzenia kolejnego tysiąca funkcji o zasięgu globalnym.

Albo szybkie operowanie na tablicy, poprzez klucz string:
$tablica['one'] = array....;

Przecież sam wysunąłem w poprzednim poście argument o tym, że kluczem można z łatwością uczynić wszystko co zechcesz? Ok, klient nasz pan.

HashMap<String, String> map = new HashMap<String, String>() {{
   put("Malinowska", "spod sklepu");
}};
System.out.println(map.get("Malinowska")); // "spod sklepu"

W przypadku mapy kluczem może być nawet długość pałki przedstawiona w stopniach celsjusza, w PHP tylko typ skalarny.

Masz takie pojęcie o Javie jak ja o pilotowaniu szybowca.

2
  1. Brak potrzeby definiowania typów i definiowania w ogóle ;) miał pewnie wpływ na styl pisania phpowców.
  2. PHP dopiero od wersji 5.3 jest poważnym narzędziem do OOP.
  3. ... stąd też podejście do projektowania aplikacji i stosowania wzorców projektowych, znane w Javie od dłuższego czasu, przyszło do krainy PHP stosunkowo późno.

Niemniej nawet w poważnych projektach interfejsy spotyka się rzadko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1