http://www.zaachi.com/cs/items/hodnota-promenne-v-metode.html

Hodnota proměnné v metodě

Publikováno: 06.11.2009 10:00:32

Občas narazíte na situaci, kdy potřebujete získat z metody hodnotu proměnné, kterou ale nemůžete vrátit pomocí return, například kvůli dalšímu zpracování kódu.

S těmito třemi případy jsem se setkal, který je podle vás nejlepší, nebo jaký způsob používáte vy?

1. Reference (WTF?)

class MyClass
{
	/**
	 * Reorder columns from table
	 * @param $columns
	 * @param $affected_columns
	 * @return unknown_type
	 */
	public function ReorderColumns($columns, &$affected_columns)
	{
		/**
		 * my reorder code...
		 */
		$affected_columns = count( $columns );
		/**
		 * next code...
		 */
	}
}

$affected_columns = 0;

$mc = new MyClass();
$mc->ReorderColumns($columns, $affected_columns);

if( $affected_columns == 0 )
{
	/**
	 * my code
	 */
}

2. veřejná proměnná

class MyClass
{
	//count of affected columns
	public $affected_columns = 0; 

	/**
	 * Reorder columns from table
	 * @param $columns
	 * @param $affected_columns
	 * @return unknown_type
	 */
	public function ReorderColumns($columns)
	{
		/**
		 * my reorder code...
		 */
		$this->affected_columns = count( $columns );
		/**
		 * next code...
		 */
	}
}

$mc = new MyClass();
$mc->ReorderColumns($columns);

if( $mc->affected_columns == 0 )
{
	/**
	 * my code
	 */
}

3. Get metoda

class MyClass
{
	//count of affected columns
	private $affected_columns = 0; 

	/**
	 * Reorder columns from table
	 * @param $columns
	 * @param $affected_columns
	 * @return unknown_type
	 */
	public function ReorderColumns($columns)
	{
		/**
		 * my reorder code...
		 */
		$this->affected_columns = count( $columns );

		//$this->SetAffectedColumns(count($columns));

		/**
		 * next code...
		 */
	}

	/**
	 * Getter ($affected_columns)
	 * @return int
	 */
	public function GetAffectedColumns()
	{
		return $this->affected_columns;
	}

	/*
	private function SetAffectedColumns($affected_columns)
	{
		$this->affected_columns = $affected_columns;
	}
	*/
}

$mc = new MyClass();
$mc->ReorderColumns($columns);

if( $mc->GetAffectedColumns() == 0 )
{
	/**
	 * my code
	 */
}

Tento posledni příklad by bylo možné samozřejmě doplnit ještě o setovací funkci (zapoznámkovaná SetAffectedColumns), ale to je v tomto případě zbytečné, protože by metoda stejně nemohla být veřejná.