является свойством функции. Это проект создания объектов с помощью этой (конструктор) функции с новым ключевым словом.
__proto__
используется в цепочке поиска для разрешения методов, свойств. когда объект создается (с использованием функции конструктора с новым ключевым словом), __proto__
установлен в (конструктор) Function.prototype
function Robot(name) {
this.name = name;
}
var robot = new Robot();
// the following are true
robot.__proto__ == Robot.prototype
robot.__proto__.__proto__ == Object.prototype
Представьте, что существует воображаемый класс (чертеж / кокетка), связанный с функцией. Этот воображаемый класс используется для создания объектов. prototype
- механизм расширения (метод расширения в C # или Swift Extension), чтобы добавить вещи в этот воображаемый класс.
function Robot(name) {
this.name = name;
}
Вышеизложенное можно представить как:
// imaginary class
class Robot extends Object{
static prototype = Robot.class
// Robot.prototype is the way to add things to Robot class
// since Robot extends Object, therefore Robot.prototype.__proto__ == Object.prototype
var __proto__;
var name = "";
// constructor
function Robot(name) {
this.__proto__ = prototype;
prototype = undefined;
this.name = name;
}
}
Итак,
var robot = new Robot();
robot.__proto__ == Robot.prototype
robot.prototype == undefined
robot.__proto__.__proto__ == Object.prototype
Теперь добавив метод к prototype
робота:
Robot.prototype.move(x, y) = function(x, y){ Robot.position.x = x; Robot.position.y = y};
// Robot.prototype.move(x, y) ===(imagining)===> Robot.class.move(x, y)
Вышеупомянутое можно представить как расширение класса Robot:
// Swift way of extention
extension Robot{
function move(x, y){
Robot.position.x = x; Robot.position.y = y
}
}
Что, в свою очередь,
// imaginary class
class Robot{
static prototype = Robot.class // Robot.prototype way to extend Robot class
var __proto__;
var name = "";
// constructor
function Robot(name) {
this.__proto__ = prototype;
prototype = undefined;
this.name = name;
}
// added by prototype (as like C# extension method)
function move(x, y){
Robot.position.x = x; Robot.position.y = y
};
}
Как правило, если запрос DELETE отправляет данные в тело запроса, вы можете прочитать данные с помощью следующего кода:
$data = file_get_contents("php://input");
В зависимости от кодировки данных (обычно JSON или форма- закодировано), вы используете json_decode
или parse_str
для чтения данных в пригодные для использования переменные.
Для простого примера см. в этой статье , где автор использует форматированные данных для обработки запроса PUT
. DELETE
работает аналогично.
В вашем случае, однако, похоже, что имя файла считывается с URL-адреса запроса (вызов $this->uri->segment(3);
). Когда я смотрю на ваш код, кажется, что переменная $gll_id
не инициализирована, и вы не проверяете, являются ли результирующий объект $w
и переменная $gll_name
пустыми. Возможно, это приводит к сбою удаления. Включите ведение журнала ошибок с помощью ini_set("log_errors",1);
и просмотрите журнал ошибок сервера. Если сбой связи отключен, журнал ошибок должен содержать путь, который PHP пытался отключить - вероятно, что путь неправильный.