如何将变量继承到类

时间:2015-11-09 16:33:30

标签: php mysqli

我有这个:

$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程序。

2 个答案:

答案 0 :(得分:1)

将它们注入方法

例如;

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');

然后在你的方法中将它们称为常规常量。

答案 1 :(得分:0)

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

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连接(可能使用单例)
  • 使用凭证的getter / setter函数(即public static getDbHost()
  • 使用正确的面向对象方法,让executeLogin接收一个mysqli对象,该对象将从调用代码传递。