2011-07-10 60 views
1

我想从文件表中提取有关文件的所有信息,但该表的结构可能会更改。您可以在PHP的类方法中定义类变量吗?

所以,我想从表中提取所有字段名称,并使用它们来生成包含信息的类变量,然后将选定的数据存储到它们。

这可能吗?

+0

可能相关:http://stackoverflow.com/questions/6643132/store-variables-from-mysql-select-to-php-class-variables-more-efficiently-when-th/6643211#6643211 – SteAp

+1

你可以只要写'$ this-> someVar ='foo';'它应该可以工作。 – Tower

回答

3

样品

<?php 

    class TestClass 
    { 

     public $Property1; 

     public function Method1() 
     { 

      $this->Property1 = '1'; 
      $this->Property2 = '2'; 

     } 

    } 

    $t = new TestClass(); 
    $t->Method1(); 

    print('<pre>'); 
    print_r($t); 
    print('</pre>'); 

?> 

输出

TestClass Object 
(
    [Property1] => 1 
    [Property2] => 2 
) 

如您所见,未定义的属性仅通过使用对$this的引用进行分配而创建。所以是的,你可以在类方法中定义类变量。

4

是的,你可以看到PHP的重载。

http://php.net/manual/en/language.oop5.overloading.php

快速实施例:(不可这也不是很大的用法)

<?php 

class MyClass{ 
    var $my_vars; 

    function __set($key,$value){ 
     $this->my_vars[$key] = $value; 
    } 

    function __get($key){ 
     return $this->my_vars[$key]; 
    } 
} 

$x = new MyClass(); 

$x->test = 10; 
echo $x->test; 

?> 
+0

我相信你完全可以跳过__get和__set,并得到完全相同的行为。您只需要定义那些如果您想要的行为比仅仅检索设置更复杂的行为。 –

+0

确实如此,我个人喜欢这样做。 :) – Eddie

+0

但这不是“从类方法内定义属性”的例子,是吗?这是一个使用魔术方法从课堂外派发不存在的属性的检索/定义的例子。 – Alexander

相关问题