[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