[PHP-users 6463] Re: Parse error "${'class'}::example();"

Masaki Fujimoto php-users@php.gr.jp
Sun, 24 Mar 2002 21:22:37 +0900


ふじもとです。

On Sun, 24 Mar 2002 20:31:27 +0900 (JST)
Yoshitake Shinohara <yoshi@yyn.jp> wrote:

> こんばんは。
> よしたけ@YYNです。

こんばんは。

> オブジェクト指向プログラムを今まで書いた事が無くて、今回えいや!で勉強はじめたのです
> が、サンプルコードで動かない部分がありましたので、何が問題か教えてください。
> 
> http://www.php.net/manual/ja/keyword.paamayim-nekudotayim.php 中の
> -------------
> class A {
>   function example() {
>     return 'example!';
>   }
> }
> 
> $class = 'A';
> $instance = 'a';
> 
> $a = new A;
> 
> // While you can do this in PHP4:
> print ${$instance}->example();
> 
> // The parser doesn't seem to like this:
> print ${'class'}::example();
> 
> // A workaround is to use eval()
> print eval("return $class::example();");
> -------------
> のコードで、print ${'class'}::example();の部分でparse errorになります。

念のため申し上げておきますと、よしたけさんが参考になさったのは'User
Contributed Notes'なわけでhttp://jp2.php.net/manual/ja/about.notes.phpに
書いてありますように、その内容については保証されていないということにお気
をつけ下さい。

さて、Parse Errorの件ですがこれは'The parser doesn't seem to like this'
(意訳:PHP4では上の例は動くけど、これはダメみたいだ)と書いているので、つ
まり当然Parse Errorになるわけです。

で、'A workaround is to use eval()'(eval()を使えばなんとかなる)と書いて
あるように、どうしても::を使いたいならeval()を使うしかないみたいですね(
ひょっとしたらもっといい方法があるかもしれませんが)。


--
藤本 真樹

アストラザスタジオ
fujimoto@studio.co.jp
fujimoto@php.net