PHP$当不在对象上下文中时,设置来自类外的公共变量

PHP$当不在对象上下文中时,设置来自类外的公共变量,php,arrays,function,oop,static,Php,Arrays,Function,Oop,Static,我有一个简单的类,我想从类外设置public变量 <?php class AlachiqHelpers { public $height; public static function getHeight($height) { return $this->height - 50; } public static function setHeight($height) { $this->heig

我有一个简单的类,我想从类外设置
public
变量

<?php

class AlachiqHelpers
{
    public $height;

    public static function getHeight($height)
    {
        return $this->height - 50;
    }

    public static function setHeight($height)
    {
        $this->height = $height;
    }
}
$this
关键字不能在静态上下文中使用!。 案例1:

您需要从函数定义中删除
static
关键字

而不是

public static function setHeight( $height ){
应该是

public function setHeight( $height ){

案例2:

如果您真的需要将其(功能)设置为
静态
。。。您可以使用
self
关键字访问变量

public static $height;
public static function setHeight( $height )
{
    self::$height=22;
}
请记住,
$height
变量也是静态的


工作守则。。(静态一)
删除
static
,这些方法不应该是静态方法,而应该是实例方法

$this
不能在静态上下文下使用,因为静态上下文由所有实例共享,但不是单个实例共享

静态方法只能访问静态属性

非静态方法可以访问非静态属性(通过
$this->foo
)和静态属性(通过
self::$foo

由于静态方法可以在没有创建对象实例的情况下调用,因此伪变量$this在声明为静态的方法中不可用

不能在静态函数中使用
$this
,因为静态函数独立于任何实例化对象

尝试使函数不是静态的

public  function setHeight( $height ){

        $this->height=$height;

    }

此外,如果您确实需要静态方法,您应该验证是否需要静态方法。您需要使用
static::$variable
self::$variable
访问属性或变量,而不是
$this->variable
<?php
class AlachiqHelpers
{
    public static $height;
    public function getHeight()
    {
        return self::$height - 50;
    }

    public static function setHeight($height1)
    {
        self::$height = $height1;
    }
}

$a = new AlachiqHelpers();
$a->setHeight(180);
echo $a->getHeight();
130
public  function setHeight( $height ){

        $this->height=$height;

    }