使用define()时对象的未定义属性

时间:2012-04-11 06:58:55

标签: php

当我知道myobject的属性已经被声明时,为什么我不能做以下的事情:

define('title','boats');

myobject->title;

但这有效:

myobject->boats

这是不是很好的做法?

2 个答案:

答案 0 :(得分:3)

你不能使用

$myobject->title

因为这是试图访问对象的title属性。如果此属性不存在,则会触发错误。

您可以使用

$myobject->{title}

但我宁愿看到你使用变量而不是常量,例如

$title = 'boats';
echo $myobject->$title;

理想情况下,您将知道要访问哪个属性并正确使用其名称

$myobject->boats

答案 1 :(得分:1)

  

当我知道myobject的属性将要声明时,为什么我不能做以下的事情:

可能是因为PHP希望您使用方法名称来调用它。但是有一些选择:

<?php
define( 'METHOD', 'bar' );

class Foo {
    public function bar( ) {
        echo "Foo->bar( ) called.\n";
    }
}

$foo = new Foo;
call_user_func( array( $foo, METHOD ) );

// or
$method = METHOD;
$foo->$method( );

编辑:啊,我好像被误解了。我的版本用于调用名称在常量中定义的方法,而您正在寻找一种调用属性的方法。好吧,我会留在这里以备将来参考。