Возможно, мне что-то не хватает, я не уверен. Поиск Google тоже не помог.Как создать экземпляр класса в другом классе
То, что я хочу сделать, это вызвать класс databaseServer и использовать его методы в моем классе userControl. Вот мой файл lib_class.php:
<?php
include('definitions.php');
class databaseServer {
var $con;
var $db;
var $close;
var $qry;
var $sql;
function connect($host,$user,$pw,$db) {
$this->con = mysql_connect($host,$user,$pw);
if (!$this->con) {
die('Could not connect: ' . mysql_error());
}
else {
echo "Database Connected";
}
$this->selectDb($db);
}
function selectDb($database) {
$this->db = mysql_select_db($database,$this->con);
if (!$this->db) {
echo "Could not Select database";
}
else {
echo "Database Selected";
}
}
function disconnect() {
$this->close = mysql_close($this->con);
if ($this->close) {
echo "Disconnected";
}
}
function query($test) {
if (!mysql_query($test)) {
die("Error: " . mysql_error());
}
}
} // databaseServer
class cookie {
var $expireTime;
function set($name,$value,$expiry) {
$this->expireTime = time()+60*60*24*$expiry;
setcookie($name,$value,$expireTime);
}
function delete($name) {
setcookie($name,"",time()-3600);
}
function check($name) {
if (isset($_COOKIE["$name"]))
echo "Cookie Set";
else
echo "Cookie failed";
}
} //cookie
class userControl {
public function __construct(databaseServer $server) {
$this->server = new databaseServer();
}
function createUser($uname,$pword) {
$this->server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$result = $this->server->query("SELECT * FROM user_list WHERE uname='" . $this->server->real_escape_string($uname) . "'");
if ($this->result->num_rows() === 0) {
if ($this->server->query("INSERT INTO user_list (uname, pword)
VALUES ('" . $this->server->real_escape_string($uname) . "','" . $this->server->real_escape_string($pword) . "')") {
echo "User Added Successfully!";
}
else {
echo "Error Adding User!";
}
}
else {
echo "User Already Exists!";
}
} // createUser
} // userControl
?>
Однако это не работает, и я не понимаю почему. Мои классы databaseServer и cookie отлично работают, когда я опускаю класс userControl из файла, поэтому я знаю, что ошибка должна быть в этом классе где-то. ООП - это то, что я пытаюсь изучить, и я продолжаю спотыкаться.
Отголоски в классе базы данных базы данных есть только для меня, чтобы проверить его. Я реализую классы в файле index.php следующим образом:
<?php
include('definitions.php');
include('class_lib.php');
$bmazed = new databaseServer();
$bmazed->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$sql = "INSERT INTO blah
VALUES ('testing 92')";
$bmazed->query($sql);
$bmazed->disconnect();
// $control = new userControl();
// $uname = "Test1";
// $pword = "test1";
// $control->createUser($uname,$pword);
echo "<br />";
echo "<br />";
?>
Линия закомментированую для целей тестирования, так что я не должен держать повторное написание кода.
Я действительно не знаю, где проблема, я проверил синтаксис, и все кажется прекрасным.
Я пробовал все предлагаемые ответы, но ни один из них, похоже, не заставил скрипт работать. Я редактировал оригинальный вопрос, чтобы показать больше моего кода. Как уже упоминалось, код предназначен исключительно для тестирования, поэтому в нем есть несколько странных вещей, вроде кажущихся случайным эхом. –
@ Саладин запускает 'php -l lib_class.php', и вы увидите, что он жалуется на неожиданные' {'и' else' в блоке 'if', где вы делаете' INSERT'. Это потому, что вам не хватает закрывающего ')' на этом блоке 'if'. При разработке кода убедитесь, что включены 'error_reporting' и' display_errors'. – Gordon