【问题标题】:How to pass array from method to property using PHP如何使用 PHP 将数组从方法传递到属性
【发布时间】:2016-01-03 18:23:45
【问题描述】:

其实我想改变当前主题的颜色...这是我的 CSS 代码:

.active{
    color: red;
    border-left: 1px solid red;
}

这也是我的 PHP 类:

class Languages
{
    public $active;
    public $data = '<div class="menu">
                        <ul>
                            <li $active["en"]>English</li>
                            <li $active["fr"]>French</li>
                        </ul>
                    </div>';

    function English()
    {
        // other codes
        $this->active["en"] = 'active';
        return $active;
    }

    function French()
    {
        // other codes
        $this->active["fr"] = 'active';
        return $active;
    }

}

但是上面的代码不起作用,为什么?!我该如何解决?

【问题讨论】:

  • $active["en"] 实际上是一个字符串。使用占位符,然后用相应的值替换它们。

标签: php html css arrays oop


【解决方案1】:

你所做的不正确。您的代码没有将变量值添加到字符串中,而是将代码视为文本。

public $data = '<div class="menu">
                    <ul>
                        <li ' . $this->$active["en"] .'>English</li>
                        <li ' . $this->$active["fr"] .'>French</li>
                    </ul>
                </div>';

编辑 1

您还缺少 ID 或类属性。

编辑 2

正如对此答案的评论中所说,由于变量尚未初始化,您会收到错误消息,请在 __construct 方法中设置活动变量后将文本添加到 $data

编辑 3

试试这个,

    <?php
    class Languages
    {
        public $active = [];
        public $data;

        function __construct() {
            /** This will run first before anything else. **/

            $this->active["someKey"] = "someValue";
            $this->data = '<div class="menu">
                            <ul>
                                <li class=' . $this->$active["en"] . '>English</li>
                                <li class=' . $this->$active["fr"] . '>French</li>
                            </ul>
                        </div>';
        }

        function English()
        {
            // other codes
            $this->active["en"] = 'active';
            return $active;
        }

        function French()
        {
            // other codes
            $this->active["fr"] = 'active';
            return $active;
        }

    }
    ?>

【讨论】:

  • 第 1 点仍然存在。您使用局部变量而不是类属性。然后也不会被定义。
  • @Rizier123 我刚刚明白你的意思。谢谢您的帮助。已更新。
  • 在你的代码中,当我调用$obj-&gt;English()时,我的HTML代码会更新吗?
【解决方案2】:

您的代码存在一些问题。首先,使用单引号 (') 指示 PHP 不插入值。其次,我怀疑你的data 值永远不会随着$active 中的值的变化而真正更新。此外,您应该使用 class="active" 而不是简单地将单词 'active' 添加到您的 li 元素中。更有效的解决方案可能如下所示

class Languages
{
    public $active;

    function English()
    {
        // other codes
        $this->active["en"] = 'active';
        return $active;
    }

    function French()
    {
        // other codes
        $this->active["fr"] = 'active';
        return $active;
    }

    function data()
    {
        return = '<div class="menu">
                        <ul>
                            <li class="' . $this->active["en"] . '">English</li>
                            <li class="' . $this->active["fr"] . '">French</li>
                        </ul>
                        </div>';
    }

}

然后您可以通过调用$object-&gt;data() 方法访问生成的html,并且您生成的HTML 将始终反映$active 中的当前值。或者,您仍然可以将 $data 存储为成员变量,并简单地使用一个函数来使用新值(例如 function updateData())重新生成它。

【讨论】:

  • 你忘了用类属性更改$active["en"] :)
  • 谢谢你的收获,哈哈!我改进了我的答案。
  • @Sajad 他在做什么有什么问题?感谢他正在帮助其他人解决他们的解决方案,这反过来会帮助你。
  • @Sajad 他没有义务帮助你。他这样做是出于好意,也许他没有时间发布完整的答案,或者他有但不想,这取决于
  • 如何使用__construct() 而不是新方法(在本例中名为data())来实现您的解决方案?
猜你喜欢
  • 2013-05-18
  • 2022-01-05
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
相关资源
最近更新 更多