Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中的类/函数/对象内部使用外部变量_Php - Fatal编程技术网

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

如何在php中的类/函数/对象内部使用外部变量,php,Php,我知道这个问题不仅仅是重复的,我一直在阅读,但由于缺乏专业知识,我无法将任何解决方案应用到我的案例中,事实上,我做了一个类似的问题,部分解决了我的问题,所以事情是这样的: 文件vars.php <?php $var = array( "var1" => "Sample text1", "var2" => "Sample text2", "var3" => "Sample text3", "var4" => "Sample text4", "var5" => "

我知道这个问题不仅仅是重复的,我一直在阅读,但由于缺乏专业知识,我无法将任何解决方案应用到我的案例中,事实上,我做了一个类似的问题,部分解决了我的问题,所以事情是这样的:

文件vars.php

<?php
$var = array(
"var1" => "Sample text1",
"var2" => "Sample text2",
"var3" => "Sample text3",
"var4" => "Sample text4",
"var5" => "Sample text5",
"var6" => "Sample text6",
);
?>
<?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'
        );
?>

有谁能指导我如何表示变量以实现这一目标。。。。非常感谢

您可以将其作为构造函数的一部分传递,如下所示

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']

首先,您不能将变量注入类的声明体。类的这一部分在编译代码时由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']);
你引用的话也完全错了。现在我只是在类中将它们设置为局部变量。如果要将它们设置为属性,请执行以下操作:

<?php
include ("vars.php");
class mouth {
private $teeth = array(
FIRST_EX=>'$var['var1']',
SECOND_EX=>'$var['var2']'
);
public $forms = array(
 'signin'=>array(
            'fields'=>array(
                'username'=>array('type'=>'text','placeholder'=>'$var['var3']','icon'=>'envelope'),
                'password'=>array('type'=>'password','placeholder'=>'$var['var4']','icon'=>'lock')
            ),
            'submit'=> '$var['var5']',
            'message'=> '$var['var6']'
        );
?>
 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会告诉我参数是什么。像这样(如果我把文档注释放进去):

然后它(IDE)告诉我这些东西是什么。如果您有机会查看EclipsePDT,这是我使用的编辑器,它是免费的,它将帮助您编写代码


另外,我必须为您制作所有PSR2,您也可以在mouth类的构造函数中要求或包含vars,如下所示。首先,返回vars文件中的数组

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

   public function __construct() {
     $this->var=require('vars.php');
   }
  .....
 }
最后,您现在可以使用

$this->var['var1']

您的属性真的应该是静态的,还是必须实例化?可能的重复项您不能在类内访问$var,也不能用其他变量的值声明类属性。@Davіd,正如我在问题中所说的,没有面向对象php方面的专业知识,所以我不知道如何回答您的问题
$this->var['var1']