У меня есть следующая __construct самодельного класса;
public function __construct($ip, $user, $pass, $product) {
$this->_ip = $ip;
$this->_user = $user;
$this->_pass = $pass;
$this->_product = $product;
$this->ssh = new Net_SSH2($this->_ip);
if (!$this->ssh->login($this->_user, $this->_pass)) {
return 'Login Failed';
}
$this->sftp = new Net_SFTP($this->_ip);
if (!$this->sftp->login($this->_user, $this->_pass)) {
return 'Login Failed';
}
}
Теперь проблема в том, что он говорит, что Net_SSH2 и Net_SFTP не объявлены, но я включил эти классы на странице, я не уверен, но может ли быть так, что я должен передать эти классы в этот класс вместо того, чтобы просто вызывать их?
Если да, как мне это сделать?
Лучшее решение — использовать автозагрузку.
function __autoload($class_name) {
require_once $class_name . '.php';
}
Теперь, когда вы попросите новый класс, он будет загружен автоматически.
Попробуй это.
Вы включили эти классы, используя require
, include
или функция автозагрузки?
Если нет, убедитесь, что файлы, в которых определены эти классы, загружены.
Теперь нам нужно проверить пространство имен.
На вершине Net_SFTP
, Есть ли namespace [SOMETHING]
? Если есть, вы должны обратиться к полному имени класса, или use
этот класс.
Пример:
<?php
namespace VendorName\BundleName;
class Net_SFTP {
....
}
?>
Теперь, чтобы использовать этот класс, мы должны сделать одно из следующего:
<?php
use VendorName\BundleName\Net_SFTP;
...
$this->ssh = new Net_SFTP(...);
...
?>
Или напрямую:
<?php
...
$this->ssh = new VendorName\BundleName\Net_SFTP(...);
...
?>