Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) 1 [2] 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Биндер для mysqli
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11782
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 8 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 8 дней


да, не то
делаешь абстракцию над драйвером, и в ней заводишь $parameters user posted image


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15559
Пользователь №: 6543
На форуме: 8 лет, 1 месяц, 29 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 8 дней


Ничего не понял... Как мне завести параметры, которых еще нету...

Вот я примерно так сделал. Это не абстракция? :)

<?php

namespace abc;

class mysqli extends \mysqli
{
public function __construct()
{
parent::__construct('localhost', 'root', '', 'test');
}

public function prepare($query)
{
return new mysqli_stmt($this, $query);
}
}



class mysqli_stmt extends \mysqli_stmt
{
public function __construct(mysqli $mysqli, $query)
{
parent::__construct($mysqli, $query);
}

public function bind_param($types, &...$vars)
{
var_dump($vars);
}
}

Если параметры определены до биндинга, все нормуль. Если после, то кирдык.
$mysqli = new mysqli;

$stmt = $mysqli->prepare("INSERT INTO `test` VALUES (?, ?)");

$stmt->bind_param('is', $id, $text);
$id = 5;
$text = 'text';


Не то я делаю?


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11782
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 8 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 8 дней


class Foo
{
protected $params;

public function setParams(&...$params)
{
$this->params = $params;
}

public function dumpParams()
{
var_dump($this->params);
}
}


$foo = new Foo();

$foo->setParams($params);
$params = 'bar';
$foo->dumpParams();
// array (size=1)
// 0 => &string 'bar' (length=3)


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15559
Пользователь №: 6543
На форуме: 8 лет, 1 месяц, 29 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 8 дней


АААА! Вот спасибо, дай я тебя расцелую biggrin.gif biggrin.gif biggrin.gif

Все просто как три копейки, а тямы не хватило.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15559
Пользователь №: 6543
На форуме: 8 лет, 1 месяц, 29 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 8 дней


Нифига не то... Или я опять не догоняю. Мне нельзя трогать контекст. Он таким и должен быть:
$mysqli = new mysqli;

$stmt = $mysqli->prepare("INSERT INTO `test` VALUES (?, ?)");

$stmt->bind_param('is', $id, $text);
$id = 5;
$text = 'text';

По сути я сделал тоже самое, что и у тебя. Только переопределил метод. Но не работает же...


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11782
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 8 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 8 дней


про контекст не понял
покажи код метода
и как проверяешь тоже покажи


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15559
Пользователь №: 6543
На форуме: 8 лет, 1 месяц, 29 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 8 дней


Я же написал сверху. Именно так и проверяю. Если выше вызова, то видит. Ниже - нет. Наверно при переопределении область видимости меняется чтоли... Хрен пойми.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15559
Пользователь №: 6543
На форуме: 8 лет, 1 месяц, 29 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 8 дней


Цитата (Invis1ble @ 26.10.2015 - 18:53)
про контекст не понял

Мне нельзя ничего менять при вызовах. Должен сохраняться нативный синтаксис. Нельзя объявлять другие и дополнительные классы. И порядок вызовов должен сохраняться. Другими словами мне нужно отдебажить уже готовые скрипты, не меняя их.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15559
Пользователь №: 6543
На форуме: 8 лет, 1 месяц, 29 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 8 дней


Могу даже дамп дать))
CREATE TABLE IF NOT EXISTS `test` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`text` text NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11782
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 8 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 8 дней


да мне не нужен дамп, покажи код класса (mysqli_stmt или как он у тебя там называется)


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11782
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 8 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 8 дней


Цитата (twin @ 26.10.2015 - 22:59)
Цитата (Invis1ble @ 26.10.2015 - 18:53)
про контекст не понял

Мне нельзя ничего менять при вызовах. Должен сохраняться нативный синтаксис. Нельзя объявлять другие и дополнительные классы. И порядок вызовов должен сохраняться. Другими словами мне нужно отдебажить уже готовые скрипты, не меняя их.

а как ты собрался дебажить тогда?
либо ты делаешь полную копию нативных классов (что бессмысленно), либо ты добавляешь дополнительную логику
всё от того, что ты не соблюдаешь инкапсуляцию, пользователь не должен лезть в исходники предоставляемых классов и вкорячивать туда своими грязными ручонками var_dump, для дебага должен быть программный интерфейс
не нравится такой подход - придется и дальше плакать, жрать кактус и обзывать приверженцев ООП нехорошими словами wink.gif


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11782
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 8 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 8 дней


как вариант, в качестве хака - добавить дебаг в деструктор твоего mysqli_stmt (то есть перенести код из моего Foo::dumpParameters() в твой mysqli_stmt::__destruct()), но не уверен, сработает ли


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15559
Пользователь №: 6543
На форуме: 8 лет, 1 месяц, 29 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 8 дней


Цитата (Invis1ble @ 26.10.2015 - 19:37)
не нравится такой подход - придется и дальше плакать, жрать кактус и обзывать приверженцев ООП нехорошими словами

Причем тут это... В данном случае и в мыслях не держал. И инкапсуляция тут не причем. Класс доступен для расширения, а значит имею полное право переопределить метод. А то, что он при этом теряет часть свойств, не моих грязных рученок вина. Просто разработчики нарушили правила Лискоу. Не нужно было делать такую возможность с постопределением параметров. Не подумали, что найдется такой вот индивид, кто наступит на эту граблю. smile.gif

Кстати, не я первый и не я последний делаю эту попытку. И все в принципе получается, кроме этих ссылок. Ну не получилось - жаль. Только и всего. С деструктором спасибо, но не выйдет. Для этого нужно объект разрушить, а мне нельзя лезть в контекст.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15559
Пользователь №: 6543
На форуме: 8 лет, 1 месяц, 29 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 8 дней


Семен Семеныч! biggrin.gif

Вот это я протупил вчера не выспавшись. Ведь execute() тоже можно переопределить. И все, проблема решена.

Invis1ble Всё таки надо тебя расцеловать. Надо. smile.gif


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11782
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 8 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 8 дней


Цитата (twin @ 27.10.2015 - 03:26)
Для этого нужно объект разрушить, а мне нельзя лезть в контекст.

не нужно, он автоматически вызывается:
Цитата
Деструктор будет вызван при освобождении всех ссылок на определенный объект или при завершении скрипта (порядок выполнения деструкторов не гарантируется).

class Foo
{
protected $params;

public function setParams(&...$params)
{
$this->params = $params;
}

public function __destruct()
{
var_dump($this->params);
}
}


$foo = new Foo();

$foo->setParams($params);
$params = 'bar';
// array (size=1)
// 0 => &string 'bar' (length=3)


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) 1 [2] 3  Ответ в темуСоздание новой темыСоздание опроса