Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Это баг php или нечто другое? помогите определить 
V
    Опции темы
mark2009
Дата 4.7.2012, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 12.10.2009

Репутация: нет
Всего: 1



Доброго времени суток,

Итак... на борту PHP 5.4.3. Имеем следующий класс:

Код

class user extends mysql
{
    /**
     * ID пользователя. Переменная, с которой будет инициализироваться объект
     * 
     * @var integer
    */
    protected $user_id;

    /**
     * Группа пользователя
     *
     * @var integer
    */
    protected $group_id;

    /**
     * Другая информация о пользователе
     * 
     * @var array
    */
    protected $userdata;

    /**
     * Возвращает поля данных для пользователя
     * 
     * @return array
    */
/**
     * Проверяет реальное существование пользователя
     *
    */
    public function user_exists(integer $user_id)
    {
        
    }


Проблемная функция user_exists. Дело в том, что в качестве аргумента должно передаваться числовое значение. PHP позволяет указать тип аргумента непосредственно в функции. Указываем...

Если передаём в качестве реального аргумента строку, то получаем:
Catchable fatal error: Argument 1 passed to user::user_exists() must be an instance of integer, string given, called in /wwwsites/forum/index.php on line 12 and defined in /wwwsites/forum/classes/class_user.php on line 82

НО: если передаём число, то получаем:
Catchable fatal error: Argument 1 passed to user::user_exists() must be an instance of integer, integer given, called in /wwwsites/forum/index.php on line 12 and defined in /wwwsites/forum/classes/class_user.php on line 82

Где логика? Если я передал string - понятно. Но из второго сообщения я ровным счётом ничего понять не могу... integer должно передаться, integer и передалось что явствует из сообщения об ошибке... и всё равно выдаётся ошибка? Может быть я что-то не так делаю?
PM MAIL WWW ICQ Skype   Вверх
IBS
Дата 4.7.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 29.7.2008
Где: Белоруссия

Репутация: нет
Всего: 6



php почти не знаю, но я думаю дело в том, что $user_id уже была объявлена в этом классе, т.е. в функции возникает неоднозначность
PM MAIL   Вверх
mark2009
Дата 4.7.2012, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 12.10.2009

Репутация: нет
Всего: 1



IBS, 
Если не знаете, зачем тогда пишете?
Это всего лишь аргумент функции. Никакой неоднозначности нет.

P.S. Код
Код

public function user_exists(integer $uid)
    {
        
    }

даёт тот же самый эффект.
PM MAIL WWW ICQ Skype   Вверх
Sentox
Дата 4.7.2012, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



а что даёт проверка is_int($user_id) и если заменить в сигнатуре integer на int

Это сообщение отредактировал(а) Sentox - 4.7.2012, 13:40
PM MAIL   Вверх
MoLeX
Дата 4.7.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



вроде нерабочий функционал, хотя могу и ошибаться


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
baldina
Дата 4.7.2012, 14:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(mark2009 @  4.7.2012,  12:32 Найти цитируемый пост)
 PHP позволяет указать тип аргумента непосредственно в функции.

если это массив или объект, а не скалярный тип. Вас не смутило слово instance?  smile 
Цитата

Type hints can not be used with scalar types such as int or string. Traits are not allowed either.

тут

Добавлено через 2 минуты и 49 секунд
php язык весьма странный. похож на лоскутное одеяло, местами в дырках, но с новой подкладкой. хотя одеяло тёплое и симпатишное (особенно подкладка), но в дырки дует.
PM MAIL   Вверх
Sentox
Дата 4.7.2012, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Ответ здесь
http://phpmaster.com/type-hinting-in-php/

Цитата

The Scalar Wars

There has been a bit of controversy regarding the addition of scalar PHP type-hinting in PHP 5.4. Those who oppose the change argue that this support would go against the fundamental designs of PHP. PHP is considered to be a weak typed language. In essence, this means that PHP does not require you to declare data types. Variables still have data types associated with them but you can do radical things like adding a string to an integer without resulting in an error.

In May of 2010 support for scalar type hinting was added to the PHP trunk. But because of community response this feature will not make its way into the 5.4 release.


В 5.4 не будет добавлена возможность скалярных величин.

Хотя здесь http://habrahabr.ru/post/136800/ утверждает обратное.
PM MAIL   Вверх
SamDark
Дата 4.7.2012, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 10
Всего: 38



Скалярные величины не будут добавлены никогда. По крайней мере таково мнение Лердорфа.


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
baldina
Дата 5.7.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



видимо потому что это сводит на нет автоматические преобразования типа. конечно можно сохранить преобразования и добавить типизацию , но это приведет к усложнению синтаксиса. для интерпретируемого языка без встроенных средств предварительной компиляции это роскошь
PM MAIL   Вверх
Sentox
Дата 5.7.2012, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



А мне если честно не хватает несколько таких вещей иногда. Больше привык с однозначными переменными работать не жели преобразования.
PM MAIL   Вверх
mark2009
Дата 5.7.2012, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 12.10.2009

Репутация: нет
Всего: 1



Понятно. Всем спасибо за ответы. Хотя мне, если честно, не хватило указания типа скалярной величины... 

Ну ладно. Ещё раз всем спасибо.


PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.