Autor Zpráva
cpbbt
Profil *
Jde udělat, aby se parametr pro danou metodu předal buď v konstruktoru anebo v dané metodě případně obojím?
Díky.
Majkl578
Profil
Konstruktor se v php zapisuje jako metoda __construct(). Její případné parametry se přidají do vytvoření instance třídy.
Příklad:
class Foo
{
  public function __construct($text)
  {
    echo $text;
  }
}
$foo = new Foo('Hello');//vypíše Hello


Jinak je dobré přečíst si v manuálu sekce základy OOP a o konstruktoru.
cpbbt
Profil *
Majkl578:
Já jsem měl na mysli, abych mohl buď zavolat konstruktor s parametrm anebo metodu s parametrem.
Aby šlo zavolat :
1.
$oo=new moje(5);
echo $oo->obvod(); 


Anebo
2
.$oo=new moje();
echo $oo->obvod(5);


Díky

class moje
{ // BEGIN class moje
	// variables
	private $r;

	// constructor
	function __construct ($r)
	{ // BEGIN constructor
		$this->r=$r;
	} // END constructor
public function obvod($r)
{ // BEGIN function obvod
		$this->r=$r;
  $o=2*3.14*$this->r;
	return $o;
} // END function obvod



} // END class moje


Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
mckay
Profil
cpbbt:
Já jsem měl na mysli, abych mohl buď zavolat konstruktor s parametrm anebo metodu s parametrem.
Aby šlo zavolat :
Co co přesně je na tom za problém?
$oo=new moje(5); 
echo $oo->obvod();


Tohle je správný zápis. Pokud chceš, aby se vypisovalo to, co předáváš jako parametr při instanci třídy, napiš to do construktoru (__construct()).

Vkládej kód do , je to pak přehlednější.
Majkl578
Profil
V tom případě je možností nepovinný parametr v konstruktoru, který při zadané hodnotě zavolá funkci na nastavení.
Nox
Profil
Abych doplnil:

u funkce obecně můžeš uvést nepovinné parametry a to tak, že jim zadáš výchozí hodnotu, nemusí to být jen u metody (konstruktu), ale i u normálních funkcí

public function __construct($var = NULL){
...
}


to NULL je příklad, často ho používám, ale může být i "abcd" nebo 7 atd.
pokud má funkce víc parametrů a některé jsou nepovinné ale ne všechny, tak první musí být (z logických důvodů) ty povinné
cpbbt
Profil *
Ale když ji mím tak napsanou a zavolám:
$oo=new moje(5);
echo $oo->obvod();
Tak to vypíše nulu.

class moje
{ // BEGIN class moje
    // variables
    private $r;

    // constructor
    function __construct ($r)
    { // BEGIN constructor
        $this->r=$r;
    } // END constructor
public function obvod($r)
{ // BEGIN function obvod
        $this->r=$r;
  $o=2*3.14*$this->r;
    return $o;
} // END function obvod



} // END class moje


Nox
Profil
cpbbt:
Ale když ji mím tak napsanou a zavolám:
jak to souvisí s nepovinností parametru konstruktoru?

Tak to vypíše nulu.
nechápu, v obvodu nastavuješ $this->r=$r;, ale $r tam nepředáváš...máš zapnuté error_reporting(E_ALL)?

drobnosti
$o=2*3.14*$this->r;return $o; => return 2*3.14*$this->r;
3.14 => M_PI
Alphard
Profil
Třeba nějak takhle. Ale zadáním parametru u metody getObvod() se mění proměnná $r, jestli je to žádoucí, nebo ne, záleží na konkrétní třídě.

<?php
class Kruh
{
  private $r;
  
  public function __construct($r = null)
  {
    $this->setPrumer($r);
  }
  
  public function setPrumer($r)
  {
    if (is_numeric($r))
    {
      $this->r = $r;
      return true;
    }
    return false;
  }
  
  public function getObvod($r = null)
  {
    $this->setPrumer($r);
    return round(2*M_PI*$this->r, 2);
  }
}

$k = new Kruh(5);
echo $k->getObvod();

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: