[PHP-users 8775] Re: SQL文 MAX(CODE) で反応がない。。

Yasuo Ohgaki php-users@php.gr.jp
Fri, 19 Jul 2002 05:03:49 +0900


大垣です。

> でも大丈夫ですね…とか思ってマニュアルを見たら、
> 
> 	http://www.php.net/manual/en/function.pg-fetch-object.php
> 
> 	Note: From 4.3.0, result_type is default to PGSQL_ASSOC while
> 	older versions' default was PGSQL_BOTH. There is no use for
> 	numeric property, since numeric property name is invalid in
> 	PHP.
> 
> とか書いてありますね。numeric が invalid なのはどういう理由なのでしょ
> う。今回の例のように関数の出力を得たい場合など、わざわざ名前をつけるよ
> りカラム順でアクセスしたほうが楽だと思うんですが。
> 

[yohgaki@dev PKGS]$ php
<?php
class foo {
  var $1 = 'AAA';
PHP Parse error:  parse error, expecting `T_VARIABLE' in - on line 4

[yohgaki@dev yohgaki]$ php
<?php

$obj->1;
PHP Parse error:  parse error, expecting `T_STRING' or `T_VARIABLE' or
`'{'' or `'$'' in - on line 3

という事なので、pg_fetch_object()でPGSQL_BOTHにするのは
言語としての整合性、処理の無駄を考えてPGSQL_ASSOCに変更しま
した。

# 変数名は多くの言語と同じで数字で始められません。

[yohgaki@dev PKGS]$ php
<?php

$a[1] = 'aaa';
$obj = (object)$a;
print_r($obj);

?>

stdClass Object
(
    [1] => aaa
)

PHPの場合、オブジェクトと配列は同じような物なので$obj[1]とし
てアクセスできるのですが、モジュール関数がわざと不正なプロパティー
を持つオブジェクトを作成すべきではないと考えました。

# 個人的にはpg_fetch_arrayがPGSQL_BOTHなのが非常に気に入
# らないのですが、さすがにこれをPGSQL_ASSOCに変えるのはでき
# ません。(やってしまえば良かったかな、ヒンシュク覚悟で)

--
Yasuo Ohgaki