[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Передача данных для сохранения
Страницы: 1, 2, 3, 4, 5, 6
abdula81
Ребят, подскажите.
Есть в метод create в классе. Для сохранения записи требуется заполнить 3 поля и передать в этот метод.
Как правильно сделать?
1. Передать ассоциативный массив
public function create(array $data){}

или
2. Наполнить каждое значение по отдельности
$obj->create();
$obj->setName('название');
$obj->setDescription('описание');
$obj->setPrice('цена');
$obj->save();
Zzepish
abdula81
Зависит от задачи. В ассоциативный массив передаются данные или если их очень много, или ,если они не обязательные (и их очень много). Тут всего 3 значения - не вижу смысла в массиве )
abdula81
Zzepish
Понял. Слышал что не рекомендуют делать массив, хотя и так и так видимо правильно.
Благодарю.
Эли4ка
Цитата
Как правильно сделать?

Сделать 3 параметра у функции. Это не так много, если бы было 10 тогда да.
Цитата
Слышал что не рекомендуют делать массив,

Просьба на народный эпос по программированию ссылки всегда прикладывать. Интересно читать же аргументы, доводы.
Игорь_Vasinsky
массив - расширяемо.

_____________
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
abdula81, самым правильным будет сделать и тот, и другой варианты. Одновременно!!!
В одной ситуации будет удобнее одно, в другой другое. Более того, ты сможешь, например, инициализировать с помощью массива, а затем изменить любой из параметров.
Единственное, чего в данной ситуации я бы не рекомендовал - это делать 3 параметра.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
brevis
Есть анти-паттерн, который называется "array driven development" (или "array oriented development").
На три параметра, конечно, глаза закрываются легко. А а большое количество параметров рекомендуют заводить "data object":
// не так
function create (array $array) {...}

$obj->create([
'name' => 'Name',
'description' => 'Description',
'price' => 'Price',
]);


// a вот так
class MyObject {
protected $name;
protected $description;
protected $price;
// ...getters/setters...
}

function create (MyObject $obj) {...}

$myObj = new MyObject();
$myObj->setName('Name');
$myObj->setDescription('Description');
$myObj->setPrice('Price');

$obj->create($myObj);




_____________
Чатик в телеге
abdula81
Спасибо парни за совет. Всё понятно.
На счет трех параметров актуально в случае, когда их три. Согласен.
Я же имел ввиду конечно же 3+, но не написал видимо.
У самого еще нашел реализацию и в виде массива и в виде отдельного метода на каждый параметр. Почему я так придумал, не помню, наверное, чтоб было удобно читать)
//Вот вариант в массивом
if(!empty($_POST['date'])){
$obj->filter(array('date' => $_POST['date']));
}
$obj->getAll();

//И с отдельным методом
if(!empty($_POST['date'])){
$obj->filterDate($_POST['date']);
}
$obj->getAll();
Guest
ну вы насоветовали ... по-моему все чушь

1) как применяются данные, куда они дальше идут?

2) если части данных нет, как исключения или как ошибка ,что будет происходить?

3) расширение поступающих переменных в функции планируется? Вижу по задаче что да, и ? что дальше?

Вот базовые вопросы ответы на которые позволят понять какую реализацию необходимо применить


ваше решение должно быть чем-то вроде
myClass (){

function create($aData){

// разбор массива

foreach($aData as $key =>$val){

// проверяем наличие переменной в объекте, кажется это делает метод property_exists
if( property_exists('myClass', $key) == true AND ){

if(validate $key($val) == true){
$this->$key = $val;
}
}

}


function validateKey($val){
// осуществляем проверку
return true;
}



}

}
Guest
чувствую сейчас меня шайками закидают, сейчас поправлю код

Guest

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>";

// проверяем наличие переменной в объекте, кажется это делает метод property_exists
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>";
}
}

}


// функция валидационная для свойства NameValue

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);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.