スレッド表示 | フラット表示〕 全トピック 920 件中 402 番目 次≫ ≪前

関数が参照を返すメリットとは

created: 2005-07-25 01:53 | modified: 2005-07-26 21:52 | reply: 2

[2405] 関数が参照を返すメリットとは

user: さとし | created: 2005-07-25 01:53
こんばんは。
早速ですが、関数が参照を返すメリットについて教えて下さい。
&で参照を渡せるのは知ってましたが、最近関数名の頭についているのをみかけて不思議に思いました。
またreturnの無いメソッドの頭に&が付いているのも見かけて、何をしているのか分かりませんでした。
参照で渡された引数をローカルスコープで加工すれば、関数終了後も変更は効いたままですよねえ?
わざわざreturnで返す必要がないように思うのですが、どういった使い道があるのでしょうか。
よろしくお願いします。
reply: 2406 返信 編集 削除

[2406] Re.関数が参照を返すメリットとは

user: ゆうじ | created: 2005-07-26 11:59
こんにちは。

参照を返すメソッドの使い道ですが
インスタンス化された唯一のオブジェクトを
参照したい場合によく使っています。

values.class.php
<?php
class values {

var $attributes;

function values ()
{
$this->attributes = null;
}

function & getInstance ()
{
static $instance = null;
if ($instance === null) {
$inctance = new values;
}
return $instance;
}

function getAttribute ( $name )
{
return $this->attributes[$name];
}

function setAttribute ( $name, $value )
{
$this->attributes[$name] = $value;
}
}
?>

この valuesクラスは、共通の値を一時的に格納し
同じインターフェイスでアクセスするためのオブジェクトで、
次のような呼び出し方をすれば、
どこからでも常に同じインスタンスを
同じインターフェイスでアクセス出来ます。
大きなプログラムを書く時にはこうした
共通のインターフェイスを実装しておくと重宝します。

action.php
<?php
require_once 'values.class.php';

$values =& values::getInstance();

$values->setAttribute('val1', 'abcd');
$values->setAttribute('val2', '1234');
?>

view.php
<?php
require_once 'values.class.php';

$values =& values::getInstance();

echo $values->getAttribute('val1');
echo $values->getAttribute('val2');
?>

このクラスを継承したオブジェクトをつくり
コンストラクタとgetInstanceメソッドさえ変えれば
実用的なオブジェクトになります。

php.session.php
<?php
require_once 'values.class.php';

class php_session extends values
{
function php_session ()
{
$this->attributes =& $_SESSION;
}

function & getInstance ()
{
static $instance = null;
if ($instance === null) {
$inctance = new php_session;
}
return $instance;
}
}
?>


&が付いてるのに何も返さないメソッドは
何をしているんでしょうね?
そのような使い方をしたことが無いのでわかりかねます。
Parent: 2405  reply: 2410 返信 編集 削除

[2410] Re.Re.関数が参照を返すメリットとは

user: さとし | created: 2005-07-26 21:52
これ以上ない丁寧な説明ありがとうございました。
こういった使い方するんですね。
早速使ってみます。
Parent: 2406  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 402 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑