abdula81
21.01.2019 - 13:33
Ребят, подскажите.
Есть в метод create в классе. Для сохранения записи требуется заполнить 3 поля и передать в этот метод.
Как правильно сделать?1. Передать ассоциативный массив
public function create(array $data){}
или
2. Наполнить каждое значение по отдельности
$obj->create();
$obj->setName('название');
$obj->setDescription('описание');
$obj->setPrice('цена');
$obj->save();
Zzepish
21.01.2019 - 15:42
abdula81
Зависит от задачи. В ассоциативный массив передаются данные или если их очень много, или ,если они не обязательные (и их очень много). Тут всего 3 значения - не вижу смысла в массиве )
abdula81
21.01.2019 - 16:50
Zzepish
Понял. Слышал что не рекомендуют делать массив, хотя и так и так видимо правильно.
Благодарю.
Эли4ка
21.01.2019 - 20:51
Цитата |
Как правильно сделать? |
Сделать 3 параметра у функции. Это не так много, если бы было 10 тогда да.
Цитата |
Слышал что не рекомендуют делать массив, |
Просьба на народный эпос по программированию ссылки всегда прикладывать. Интересно читать же аргументы, доводы.
Игорь_Vasinsky
21.01.2019 - 21:04
массив - расширяемо.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
21.01.2019 - 22:24
abdula81, самым правильным будет сделать и тот, и другой варианты. Одновременно!!!
В одной ситуации будет удобнее одно, в другой другое. Более того, ты сможешь, например, инициализировать с помощью массива, а затем изменить любой из параметров.
Единственное, чего в данной ситуации я бы не рекомендовал - это делать 3 параметра.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
brevis
22.01.2019 - 00:57
Есть анти-паттерн, который называется "array driven development" (или "array oriented development").
На три параметра, конечно, глаза закрываются легко. А а большое количество параметров рекомендуют заводить "data object":
function create (array $array) {...}
$obj->create([
'name' => 'Name',
'description' => 'Description',
'price' => 'Price',
]);
class MyObject {
protected $name;
protected $description;
protected $price;
}
function create (MyObject $obj) {...}
$myObj = new MyObject();
$myObj->setName('Name');
$myObj->setDescription('Description');
$myObj->setPrice('Price');
$obj->create($myObj);
_____________
Чатик в телеге
abdula81
22.01.2019 - 11:35
Спасибо парни за совет. Всё понятно.
На счет трех параметров актуально в случае, когда их три. Согласен.
Я же имел ввиду конечно же 3+, но не написал видимо.
У самого еще нашел реализацию и в виде массива и в виде отдельного метода на каждый параметр. Почему я так придумал, не помню, наверное, чтоб было удобно читать)
if(!empty($_POST['date'])){
$obj->filter(array('date' => $_POST['date']));
}
$obj->getAll();
if(!empty($_POST['date'])){
$obj->filterDate($_POST['date']);
}
$obj->getAll();
ну вы насоветовали ... по-моему все чушь
1) как применяются данные, куда они дальше идут?
2) если части данных нет, как исключения или как ошибка ,что будет происходить?
3) расширение поступающих переменных в функции планируется? Вижу по задаче что да, и ? что дальше?
Вот базовые вопросы ответы на которые позволят понять какую реализацию необходимо применить
ваше решение должно быть чем-то вроде
myClass (){
function create($aData){
foreach($aData as $key =>$val){
if( property_exists('myClass', $key) == true AND ){
if(validate $key($val) == true){
$this->$key = $val;
}
}
}
function validateKey($val){
return true;
}
}
}
чувствую сейчас меня шайками закидают, сейчас поправлю код
class myclass {
var $NameValue = NULL;
function myclass(){
echo "<br>инициализация нового объекта класса<br>";
}
function __destruct(){
echo "<br>уничтожение объекта класса<br>";
}
function create($aData = array()){
echo "<br>добавление данных<br>";
foreach($aData as $key =>$val){
echo "<br>входящие данные переменная $key значение $val<br>";
echo "<br>производим проверку наличия свойства объекта<br>";
if( property_exists($this, $key) == true){
echo "<br>свойство $key объекта обнаружено <br>";
echo "<br>производим проверку наличия валидационной функции для свойства объекта<br>";
$t = $this->$key;
$funct = 'validate'.$key;
if(method_exists($this, $funct)){
if($this->$funct($val) === true){
echo "<br>валидация пройдена, добавляем данные в переменную<br>";
$t = $val;
}else{
echo "<br>валидация не прошла<br>";
}
}else{
echo "<br>функция отсутствует<br>";
}
$this->$key = $t;
}else{
echo "<br>свойство $key объекта отсутсвует<br>";
}
}
}
private function validateNameValue($val){
echo "<br>производим проверку данных<br>";
if(is_string($val) === true){
return true;
}
return false;
}
}
$myclas = new myclass;
echo "<br>этап 1 передача числа<br>";
$myclas->create(array('NameValue'=>1));
var_Dump($myclas->NameValue);
echo "<br>этап 2 передача строки<br>";
$myclas->create(array('NameValue'=>'string'));
var_Dump($myclas->NameValue);