php - 如何在php中的类/函数/对象中使用外部变量
问题描述
我知道这是一个重复的问题,我一直在阅读,但由于我缺乏专业知识,我无法将任何解决方案应用于我的案例,实际上,我在这里做了一个类似的问题我部分解决了我的问题,所以事情是这样的:
文件vars.php
<?php
$var = array(
"var1" => "Sample text1",
"var2" => "Sample text2",
"var3" => "Sample text3",
"var4" => "Sample text4",
"var5" => "Sample text5",
"var6" => "Sample text6",
);
?>
文件申请.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'
);
?>
因此,文件apply.php中的所有文本(第一个文本、第二个文本、第三个文本等)应分别更改为、、等以显示,也分别为Sample text1、Sample text2、Sample text3等。$var['var1']
$var['var2]
$var['var3]
所以文件apply.php最终应该或多或少是这样的:
<?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']'
);
?>
有人可以指导我如何表示变量以实现这一目标....非常感谢
解决方案
首先,您不能将变量注入类的声明主体。这部分类是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,这是我使用的编辑器,它是免费的,它将帮助您编写代码。
PS我必须为你制作所有PSR2 https://www.php-fig.org/psr/psr-2/
推荐阅读
- python-2.7 - Python Self 未定义问题
- html - 我的 CSS 仅适用于正文而不适用于特定类
- python - 如何防止我的 Tweepy Twitter 机器人超过 Twitter 的速率限制?
- visual-studio - 有没有办法在 Visual Studio 2019 中隐藏反馈图标?
- android - 如何在 android App 中通过 Recyclerview 显示外部 SQLite 数据库数据?
- deepsecurity - Python SDK list_computers 方法 security_updates 对象总是无
- android - 模棱两可的方法调用导航
- copy - OneDrive 不断创建新文件的副本
- r - 带有随机森林的“对象...未找到”
- python-3.x - cProfile 没有显示任何(真实)结果——所有 000 的——在 Python 中