Вы можете структурировать свою функцию поиска в отдельном файле PHP, чтобы иметь чистый маршрут URL. Обратите внимание, что этот запрос будет подвержен SQL-инъекциям. Это всего лишь общий пример
, например
// search.php
// GET request
function SearchLocations() {
$conn = new mysqli('localhost', 'root', '', 'tutors') or die ('Cannot connect to db');
$result = $conn->query("select id,name,Location_tags from tutor_location where Location_tags='%". Вы можете структурировать свою функцию поиска в отдельном файле PHP, чтобы иметь чистый маршрут URL. Обратите внимание, что этот запрос будет подвержен SQL-инъекциям. Это всего лишь общий пример
, например
[110] HTML:
<input type="text" name="location_input" id="location_input">
<select name="locations" id="locations">
Тогда в вашем коде JavaScript:
$("#location_input").keydown(function(){
const location = $("#location_input").val();
$("#locations").hmlt(''); //reset dropdown
// do ajax call to get locations
$.ajax({
url: 'search.php', //replace this with your route of the search function
data: {location}, //pass location as body data
dataType: 'json' //expect a json response back
success: function(data) {
data.forEach(function(el) { //loop over the json response
let option = `<option id=${el.id} value=${el.name}>${el.name}</option>`
$("#locations").append(option); //append locations to select dropdown
});
},
error: function(err) { //error functions
console.log(err);
alert("Error")
}
});
});
GET['location']."%'");
$locations = [];
while ($row = $result->fetch_assoc()) {
$locations[] = $row;
}
return json_encode($locations);
}
HTML:
<input type="text" name="location_input" id="location_input">
<select name="locations" id="locations">
Тогда в вашем коде JavaScript:
$("#location_input").keydown(function(){
const location = $("#location_input").val();
$("#locations").hmlt(''); //reset dropdown
// do ajax call to get locations
$.ajax({
url: 'search.php', //replace this with your route of the search function
data: {location}, //pass location as body data
dataType: 'json' //expect a json response back
success: function(data) {
data.forEach(function(el) { //loop over the json response
let option = `<option id=${el.id} value=${el.name}>${el.name}</option>`
$("#locations").append(option); //append locations to select dropdown
});
},
error: function(err) { //error functions
console.log(err);
alert("Error")
}
});
});
Вы не можете. Необходимо сделать пакет конструктора Foo частным по крайней мере (Хотя я, вероятно, просто сделал бы, он защитил.
(Редактирование - Комментарии в этом сообщении делают правильное замечание),
Это - на самом деле признак невоспитанности наследования, названного наследованием реализации. Или исходный класс не был разработан, чтобы быть наследованным и таким образом принял решение использовать частного конструктора, или что весь API плохо разработан.
Фиксация для этого не должна выяснять способ наследоваться, но видеть, можно ли составить объект вместо наследования и сделать так через интерфейсы. Т.е. класс Foo является теперь интерфейсом Foo с FooImpl. Затем интерфейсная панель может расширить Foo с BarImpl, который не имеет никакого отношения к FooImpl.
В BarImpl Вы могли, если Вы хотите сделать некоторое повторное использование кода, иметь FooImpl внутри как участник, но это полностью до реализации, и не будет выставлен.
Вы не можете вызвать конструктора Object непосредственно от Панели, в то время как это - подкласс Foo, это имело бы к через конструктора Foo, который является частным в этом случае.
Когда Вы объявляете частного конструктора Foo, это не создает общедоступного конструктора по умолчанию. Так как Панель должна вызвать конструктора Foo's, не возможно оставить это частным. Я предложил бы, как другие имеют при использовании, защищенном вместо частного.
Вы не сможете создать экземпляр Панели столько, сколько у Foo есть частный конструктор. Единственным путем Вы смогли бы сделать это, то, если у Foo был защищенный конструктор.