Autor Zpráva
Darker
Profil
V C++ lze v rámci třídy nadefinovat jednu funkci vícekrát pro různé sestavy parametrů. Jde to i v PHP? Jde mi teď o přehlednost a jdenoduchost kódu, pokud je tedy řešení složité, krkolomné nebo nepřehledné, nemá pro mě smysl.
Nox
Profil
Nejde ... PHP na rozdíl od C++ tak neřeší typy proměnných ... takže prostě jedna funkce a uvnitř případně detekovat, co že jsi to dostal za parametry
Radek9
Profil
Darker:
Přetěžování v PHP není, jsou tam ale nepovinné parametry:
function something($a, $b=""){
  //code
}
something(1);
something(1, "something else");
Darker
Profil
Možnost nepovinných parametrů jsem využil. Jak jsem říkal, šlo mi o přehlednost kódu:
Mám funkci (konstruktor) která očekává buď šířku a výšku pro vytvoření nového něčeho, nebo pole $data obsahující informace z již uloženého něčeho.
Teď to vypadá takhle:
         /** ... pripadne nacitani ulozenych dat ... */
         //Pokud funkce dostala souradnice
         else if(is_int($data}&&is_int($h)){
            generuj($data, $h);
         }
ShiraNai7
Profil
Darker:
Možná si vytvořit "factory" metody. Protected konstruktor zamezí přímému použití new Trida. Můžeš jej nechat public a dát mu nějakou výchozí funkcionalitu, nebo jej dát protected/private a poté ho používat na interní přípravu objektu (např. předáním argumentů z factory metod). To už záleží na tobě.

<?php

class Trida
{

    protected function __construct()
    {
        // konstruktor
    }

    static public function getInstanceForDimensions($w, $h)
    {
        // vytvorit instanci pomoci $w a $h (POUZE PRIKLAD)
        $inst = new static;
        $inst->w = $w;
        $inst->h = $h;
        return $inst;
    }

    static public function getInstanceForData(array $data)
    {
        // vytvorit instanci pomoci $data
        $inst = new static;
        // neco s daty..
        return $inst;
    }

}

A poté:

$inst = Trida::getInstanceForDimensions(200, 100); // instance pro rozmery
$inst = Trida::getInstanceForData(array( /* nějaká data */ )); // instance z dat

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: