[PHP-users 1825] new してすぐに class method を呼び出すには
Osamu Shigematsu
php-users@php.gr.jp
Wed, 05 Sep 2001 20:04:18 +0900
重松です。
アンケートの件ではないですが、汎用的に、値が正当な範囲であるかを調べたり、入
力用の tag なんかを素早く作るための class を作ってみました。
$tag = new some_clsss($foo);
$tag = $tag->as_select_tag('foo');
と書けばいいところを、array() の中で使いたいために、1 行で書く必要がでてきま
した。
new してすぐに class method を呼び出すにはどうすればよいのでしょうか?
$tag = (new some_clsss($foo))->as_select_tag('foo');
$tag = (some_clsss($foo))->as_select_tag('foo');
$tag = ($tag = new some_clsss($foo), $tag->as_select_tag('foo'));
なんかどうかしらと思ったんですが、どうもうまくいきませんでした。
とりあえず、強引な方法として、class の名前, method の名前などを渡して、実行
した結果を返す関数を用意すればできることはわかるのですが、他にもっと良い方法
があればご教授下さい。
環境:
PHP 4.0.6
Apache 1.3.20
VineLinux 2.1.5 ftp
class __object__{
var $max = 0;
var $guide_max = '';
var $min = 0;
var $guide_min = '';
var $choices = array();
var $guide_choices = '';
var $val;
function __object__($val){
$this->val = $val;
}
function is_valid(){
if($guide_choices && !is_set($this->choices[$this->val]))
return $this->guide_choices;
return '';
}
function get(){
return $this->value;
}
function set_min($min,$guide){
$this->min = $min;
$this->guide_min = $guide_min;
}
function set_max($max,$guide_max){
$this->max = $max;
$this->guide_max = $guide_max;
}
function as_select_tag($name){
$tag = "<select name=\"$name\">\n";
foreach($this->choices as $val => $key){
$tag .= "<option value=\"$val\"";
if($this->val==$val)
$tag .= " selected=\"selected\"";
$tag .= ">$key</option>\n";
}
$tag .= "</select>";
return $tag;
}
}
class int_t extends __object__{
function is_valid(){
if($this->guide_min && $this->val < $this->min)
return $this->guide_min;
if($this->guide_max && $this->val > $this->max)
return $this->guide_max;
return __object__::is_valid();
}
function as_input_tag($name,$size=''){
if(!$size) $size = '8';
$tag = "<input type=\"text\" name=\"$name\" value=\"{$this->val}\"
size=\"$size\" />\n";
return $tag;
}
}
class contract_class_t extends int_t{
var $choices = array(
0 => '売り切りタイプ',
1 => '簡易見守りタイプ',
2 => '常時見守りタイプ 1',
3 => '常時見守りタイプ 2',
4 => '常時見守りタイプ 3');
var $guide_choices = '不明な契約種別です。';
};
--
Osamu Shigematsu
http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp