如何将变量继承到类


How to inherit variables to class

我有这个:

$db_hostname = 'localhost';
$db_username = 'root';
$db_password = '';
$db_database = 'publications';

保存为connection.php,但我不能在这个中插入它的变量:

namespace form;
include_once "Form.php";
include_once "connection.php";
class login extends Form
{
    public  function showLoginfrom()
    {
    echo '<form name="loginform"  method="get">';
    $login = new Form();
    $login->AddText('username','Your username');
    $login->AddPassword('password','','Your password');
    $login->SubmitButton('Login');
    echo "</form>";
}
public function executeLogin()
{
    $connection = new 'mysqli($db_hostname,$db_username,$db_password,$db_database);
    $username = ($_GET["username"]);
    $password = ($_GET["password"]);
    $query ="SELECT * FROM users WHERE username= '$username' AND password= '$password'";
    $result = $connection->query($query);
    if (mysqli_num_rows($result)== 1)
    {
        echo "Welcome";
    }
    else
    {
        echo "Login failed";
    }
}

我知道我的代码是不安全的,我只是在试验。这是我的第一个php程序。

将它们注入方法

例如;

public function executeLogin($db_hostname,$db_username,$db_password,$db_database)
{
    $connection = new 'mysqli($db_hostname,$db_username,$db_password,$db_database);

然后用当前作用域中的这些变量调用executeLogin()方法。

生成属性

有两种方法可以注入它们以生成属性。第一种方法与上述__construct()方法完全相同。

另一种方法是在__construct()方法中包含这些文件,并将它们设置为属性。例如

private $arrDbDetails = array();
public function __construct() {
  include_once "connection.php";
  $this->arrDbDetails = array(
     'host' => $db_hostname,
     'user' => $db_username,
     'pass' => $db_password,
     'db'   => $db_database
  );

然后可以使用$this->arrDbDetails['host']访问它们,例如,在executeLogin()方法中。

$connection = new 'mysqli($this->arrDbDetails['host'],$this->arrDbDetails['user'],$this->arrDbDetails['pass'],$this->arrDbDetails['db']);

使用常量

您也可以define这些值,并将它们放在全局范围内。

define('DB_USERNAME', 'my_mysql_user');

然后将它们作为方法中的正则常量调用。

另一种方法是使用带有静态成员的类。类似于:

class Config {
    static public $mysqli;
    static public $dbCredentials = [];
}
include('connection.php');
Config::$dbCredentials['host'] = $db_hostname;
// and repeat for the others
//optional, extra step:
Config::$mysqli = new 'mysqli(...);

然后使用,你可以做:

public function executeLogin()
{
    $connection = new 'mysqli('Config::$dbCredentials['host'], ..);
    //or
    $connection = 'Config::$mysqli;
    // do other stuff
}

其他注意事项/备选方案:

  • config类放入connection.php并进行设置从那里
  • 使用getter函数(即public static getConnection())获取mysqli连接(可能使用singleton)
  • 对凭据使用getter/setter函数(即public static getDbHost()
  • 使用适当的面向对象方法,让executeLogin接收一个mysqli对象,该对象将从调用代码传递