簡體   English   中英

如何在php中的類/函數/對象中使用外部變量

[英]How to use an external variable inside a class/function/object in php

我知道這個問題不僅僅是重復的,我一直在閱讀,但由於我缺乏專業知識,我無法將任何解決方案應用於我的案例,實際上,我在這里做了一個類似的問題我部分解決了我的問題,所以事情是這樣的:

文件vars.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'
        );
?>

因此,文件apply.php 中的所有文本(第一個文本、第二個文本、第三個文本等)應分別更改為$var['var1']$var['var2]$var['var3] ,等來分別顯示Sample text1、Sample text2、Sample text3等。

所以文件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/

您可以將其作為構造函數的一部分傳遞,如下所示

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

您還可以在嘴類的構造函數中要求或包含 vars,如下所示。 首先,返回vars文件中的數組

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

然后需要vars文件

 class mouth{
   private $var;

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

最后,您現在可以應用 $var 數組中的值,使用

$this->var['var1']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM