配列への参照の仕方

比較するだけなら、に書いたように

function equals(&$a, $b, $strict = TRUE) {
    return $strict ? $a === $b : $a == $b;
}

というやり方も。empty の比較版といった感じ。
あと、array_merge でデフォルト値を設定してしまうというソリューションも。

$defaults = array('id' => NULL, 'passwd' => NULL);
$params = array_merge($defaults, $_GET);
if ($params['id'] !== NULL and $params['passwd'] !== NULL) {
    do_login($params['id'], $params['passwd']);
} else {
    error_function();
}

個人的にはこれが一番スマートだと思う。

追記

がぁ。やっぱり Trackback が反映されない。ウノウの Trackback SPAM フィルタはどうなってんだ。
お、時間差で反映された。

再追記

まぁ、当該記事の array_get_value は結局 typo での E_NOTICE を抑制しちゃうので、デフォルト値に NULL を指定するなら

$id = @$_GET['id'];
$passwd = @$_GET['passwd'];

でいいんじゃね、ってのももっともな話だったり。自分で error_handler を指定している場合はちょっと注意が必要だが。
ただ、これだと

$id = @$_GeT['id'];

みたいなパターンでスルーしてしまう。

$id = array_get_value($_GeT, 'id');

なら、E_NOTICE になるので、この点だけ有利かなぁ。