简单的PHP面向对象$ this

时间:2013-12-06 22:29:56

标签: php oop this

我正在努力了解一些面向对象的基础知识。我写了这个简单的脚本,但很困惑为什么它的工作方式。

class Foo
{
function run($text = null)
{
    $this->bar = strtolower($text);
    echo $this->bar;    
}
}

$foo = new Foo;
$foo->run('THIS IS SOME TEXT IN LOWER CASE');

脚本按预期输出“这是一些小写的文本”。

但令我困惑的是,为什么我可以在不实际声明$bar变量的情况下执行此操作。为什么我只能使用$this->bar?也许我不理解$this如何正常工作,但我一直认为你必须在类中使用它之前声明一个变量。例如public $bar;

感谢您提供的任何见解。

4 个答案:

答案 0 :(得分:3)

如果您正在访问对象变量而不将其声明为类成员,PHP将自动将对象变量声明为public。这不是魔术,只是一个“功能”;)

但是,一个好的设计不应该使用这个“功能”,而是明确声明任何类成员。你的课应该是这样的:

class Foo
{
    /**
     * some description
     *
     * @var <type>
     */
    protected $bar;

    ...    

    function run($text = null)
    {
       $this->bar = strtolower($text);
       echo $this->bar;    
    }
}

答案 1 :(得分:0)

您需要在类方法之外的变量前放置protectedprivate,以将类变量声明为public以外的任何变量。在PHP中,赋值是声明,如果它尚未声明。请注意,您也可以这样做:

$ary = array('a', 'b', 'c', 'd');
foreach($ary as $v){
  $newArray[] = $v;
}

注意,我从未在循环之前声明$newArray = array();

答案 2 :(得分:0)

您可以在类(a.k.a.属性)中声明变量,如下所示:

class Foo {
    public $bar;
}

请注意public关键字。在这里,我们声明了该属性的可见性。可见性有三种类型:publicprivateprotected

  • 公开:您可以随时随地访问该媒体资源
  • 私有:您只能访问
  • 中声明的类中的属性
  • 受保护:您只能访问其声明的类中的属性和任何子类

这也适用于方法。我不会详细介绍,但您可以阅读更多here


如果您没有声明属性,但是在方法中设置了一个属性,那么PHP会自动为您声明属性并指定您指定的值。

答案 3 :(得分:0)

你应该看看http://php.net/manual/en/language.oop5.magic.php

考虑一下你声明一个以前不存在的变量的方式,在对象之外,在对象内部会发生同样的方式,因为它们键入不好