如何在PHP的类/函数/对象内使用外部变量

时间:2018-09-03 17:51:17

标签: php

我知道这个问题已经重复了很多,我一直在阅读,但是由于缺乏专业知识,我无法将任何解决方案应用于我的案子,实际上,我做了类似的事情问题here是我部分解决了问题的地方,所以是这样:

文件 vars.php

Widget

文件 apply.php

<?php
$var = array(
"var1" => "Sample text1",
"var2" => "Sample text2",
"var3" => "Sample text3",
"var4" => "Sample text4",
"var5" => "Sample text5",
"var6" => "Sample text6",
);
?>

因此,文件 apply.php 中的所有文本(第一文本,第二文本,第三文本等)应分别由<?php include ("vars.php"); class mouth { private $teeth = array( FIRST_EX=>'first text', SECOND_EX=>'second text' ); public $forms = array( 'signin'=>array( 'fields'=>array( 'username'=>array('type'=>'text','placeholder'=>'third text','icon'=>'envelope'), 'password'=>array('type'=>'password','placeholder'=>'fourth text','icon'=>'lock') ), 'submit'=> 'fifth text', 'message'=> 'sixth text' ); ?> 进行更改,$var['var1']$var['var2]等也分别显示样本文本1,样本文本2,样本文本3

因此文件 apply.php 最终应大致像这样:

$var['var3]

有人可以指导我如何表示变量以实现此目标吗?...非常感谢

3 个答案:

答案 0 :(得分:1)

首先,您不能将变量注入类的声明主体中。 PHP会在编译代码时解析该类的这一部分,因此您之后不能直接对其进行修改。并且在设置变量之前先处理它。

幸运的是,我们有这些叫做方法的东西,它们就像函数一样,但是在类中(它们甚至被编写为函数),有些人只是称它们为函数。有时我发现自己在叫他们。

无论如何:

class Mouth
{ //capitalize class names

    public function createTeeth($var1, $var2)
    {
        $teeth = array(
            FIRST_EX  => $var1,
            SECOND_EX => $var2
        );
    }

    public function createForms($var3, $var4, $var5 $var6)
    {
        $forms = array(
            'signin' => array(
                'fields' => array(
                    'username'    => array(
                    'type'        => 'text',
                    'placeholder' => $var3,
                    'icon'        => 'envelope'
                ),                               
                'password' => array(
                         'type'        => 'password' ,
                         'placeholder' => $var4, 
                         'icon'        => 'lock'
                     )
                ),
                'submit'  => $var[ 'var5' ],
                'message' => $var[ 'var6' ]
             )
        );

    }
}

然后我们这样称呼它

  $Mouth = new Mouth();
  //then call them
  $Mouth->createTeeth($var['var1'], $var['var2']);

您引用的内容也全错了。现在我将它们设置为类中的局部变量。如果要将它们设置为属性,请执行以下操作:

 class Mouth
 { //capitalize class names

    private $teeth = [];

    public function createTeeth($var1, $var2)
    {
        $teeth = array(
            FIRST_EX  => $var1,
            SECOND_EX => $var2
        );
    }
   ...
 }

如果要输出,则将它们返回。

 class Mouth
 { //capitalize class names

    private $teeth = [];

    public function createTeeth($var1, $var2)
    {
         return array(
            FIRST_EX  => $var1,
            SECOND_EX => $var2
        );
    }
   ...
 }

或以上的任意组合。您还可以根据需要为每个函数创建一个函数

 class Mouth
 { //capitalize class names

    private $teeth = [];

    public function setTeeth($var1, $var2)
    {
         $this->teeth = array(
            FIRST_EX  => $var1,
            SECOND_EX => $var2
        );
    }

    public function getTeeth()
    {
        return $this->teeth;
    }
   ...
 }

这就是所谓的依赖注入。基本上,您是在注入值或东西,这取决于类。

希望有帮助,哦,我也向您的其他问题添加了评论。

如另一个答案中所述,您也可以将它们作为构造函数参数传递,很多选择取决于您如何使用它们。如果代码中同时需要它们,则可能不希望这样做。

我个人喜欢将其分解为参数的命名位置,这有助于我的IDE(集成开发环境)。这只是一个出色的编辑器,它执行诸如自动完成等功能。因此,当我将它们作为参数并使用该类时,IDE会告诉我参数是什么。像这样(如果我放入DOC注释):

class Mouth
{ 

    /**
     * 
     * @var array
     */
    private $teeth = [];

    /**
     * populate the teeth array
     * 
     * @param string $var1
     * @param string $var2
     */
    public function setTeeth($var1, $var2)
    {
        $this->teeth = array(
            FIRST_EX  => $var1,
            SECOND_EX => $var2
        );
    }

    /**
     * returns the teath array
     * 
     * @return array
     */
    public function getTeeth()
    {
        return $this->teeth;
    }
    ...
}

然后,它(IDE​​)告诉我那是什么东西。如果您有机会查看Eclipse PDT,那是我使用的编辑器,它是免费的,它将帮助您进行编码。

P.S。我必须为您https://www.php-fig.org/psr/psr-2/

答案 1 :(得分:0)

您可以按以下方式将其作为构造函数的一部分传递

class mouth {
    private $var;

    public function __construct($var) {
        $this->var=$var;
    }
.....
}

并在实例化类时传递它

$var = array(
 "var1" => "Sample text1",
 "var2" => "Sample text2",
 "var3" => "Sample text3",
 "var4" => "Sample text4",
 "var5" => "Sample text5",
 "var6" => "Sample text6",
);

$mouth = new mouth($var);

在类方法中,应使用$ this-> var ['var3']而不是$ var ['var3']

答案 2 :(得分:0)

您还可以要求在口类的构造函数中包含或包含var,如下所示。首先,将数组返回到vars文件中

winner.ranking

然后需要vars文件

<?php
  return array(
    "var1" => "Sample text1",
    "var2" => "Sample text2",
    "var3" => "Sample text3",
    "var4" => "Sample text4",
    "var5" => "Sample text5",
    "var6" => "Sample text6",
  );
?>

最后,您现在可以使用

应用$ var数组中的值
 class mouth{
   private $var;

   public function __construct() {
     $this->var=require('vars.php');
   }
  .....
 }