Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444

Типы данных и модификатор доступа по умолчанию

02.09.2017, 12:15. Показов 1818. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Родилось два вопроса.
1 - в параметрах функций можно указать типы параметров , а насколько велика разница? Да , когда твой код кто-то будет использовать , то ,конечно, для публичных функций нужно указать ожидаемые типы параметров. А что если код юзаешь только ты , может опускать типы параметров , дабы сжать код?Просто никаких изменений не будет в производительности если заранее указывать типы , или же будет?Вообще есть ли какой-нибудь материал про тонкости работы интерпретатора ?
2 - Если не указывать модификатор (public private protected) , то какой он будет для конструкторов , классов , их полей и функций?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.09.2017, 12:15
Ответы с готовыми решениями:

Модификатор доступа protected
Здравствуйте!!! Возник такой вопрос: на сайте MSDN написано, что к типу или элементу с модификатором доступа protected - Доступ...

Модификатор доступа private
Добрый день, Я считал, что поле класса объявленное с модификатором private доступно только в экземпляре данного класса, но вот увидел...

Модификатор доступа private.
Создал класс, где одну переменную (поле) объявил в разделе private. Далее обратился к ней из процедуры обработки кнопки (присвоил ей...

9
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
02.09.2017, 12:27
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Если не указывать модификатор (public private protected) , то какой он будет для конструкторов , классов , их полей и функций?
А попробовать самому что мешает?
Поля без модификатора - parse error
Методы - public.
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
02.09.2017, 14:33
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
дабы сжать код?
А зачем сжимать код при современных размерах hdd?
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Да , когда твой код кто-то будет использовать , то ,конечно, для публичных функций нужно указать ожидаемые типы параметров. А что если код юзаешь только ты
А ты вспомнишь через неделю, месяц и т.д что какая функция должна принимать? Почему другим надо делать удобнее, а себе нет?
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Просто никаких изменений не будет в производительности если заранее указывать типы , или же будет?
Сложно сказать, здравый смысл говорит что тайпхинты должны замедлять, но быть быстрее чем тх осутствие с проверкой внутри функции типа is_int и т.д. С другой стороны заранее известный тип - потенциальная возможность для оптимизаций. В общем если разница и есть, то она будет намного меньше чем время выполнения кода и явно не будет причиной медленной работы.
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Вообще есть ли какой-нибудь материал про тонкости работы интерпретатора ?
Исходный код
2
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
02.09.2017, 16:28  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
А зачем сжимать код при современных размерах hdd?
Что бы облегчить навигацию по коду , ну и вообще , чем меньше кода тем быстрее ты его прочтешь)
Цитата Сообщение от Jewbacabra Посмотреть сообщение
А ты вспомнишь через неделю, месяц и т.д что какая функция должна принимать? Почему другим надо делать удобнее, а себе нет?
Ну исходный код у меня есть , достаточно в него заглянуть , да и он всего 6-7 строк макс)
Что касательно кода , как раз mysql выжимает мозг...
SQLDatabase.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
/**
 * Created by PhpStorm.
 * User: RAE
 * Date: 29.08.2017
 * Time: 16:51
 */
include "SQLTable.php";
 
class SQLDatabase
{
    private const HOST = "localhost";
    private $ConnectionLink;
 
    //constructor
    private function __construct()
    {
    }
 
    private static function constructor()
    {
        $result = new SQLDatabase();
        return $result;
    }
 
    public static function Load($database, $login, $password = "")
    {
        $result = SQLDatabase::constructor();
        $result->ConnectionLink = mysqli_connect(SQLDatabase::HOST, $login, $password, $database);
        return $result;
    }
    //************
    //Объектные методы
    public function newTable($name, $architecture)
    {
        return SQLTable::createNew($this->ConnectionLink, $name, $architecture);
    }
 
    public function getTable($name)
    {
        return SQLTable::Load($this->ConnectionLink,$name);
    }
 
    public function dropTable($name)
    {
        mysqli_query($this->ConnectionLink, "DROP TABLE $name");
    }
 
    public function getID()
    {
        return $this->ConnectionLink;
    }
    //destructor
    public function __destruct()
    {
        mysqli_close($this->ConnectionLink);
    }
}
SQLTable.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
/**
 * Created by PhpStorm.
 * User: RAE
 * Date: 30.08.2017
 * Time: 19:49
 */
include "ThrowException.php";
 
class SQLTable
{
    private $Database;
    private $Name;
 
    //Вспомогательные методы
    private function query($query)
    {
        echo $Query = $query . ";";
        return mysqli_query($this->Database, $Query);
    }
 
    //constructor
    private function __construct()
    {
    }
 
    private static function constructor($databaseLink, $name)
    {
        $result = new SQLTable();
        $result->Database = $databaseLink;
        $result->Name = $name;
        return $result;
    }
 
    public static function Load($databaseLink, $name)
    {
        $result = SQLTable::constructor($databaseLink, $name);
        if (mysqli_num_rows($result->query("SHOW TABLES LIKE $name;")) === 0)
            throwException("Таблица $name не найдена в базе данных $databaseLink.");
        return $result;
    }
 
    public static function createNew($databaseLink, $name, $architecture)
    {
        $result = SQLTable::constructor($databaseLink, $name);
        $result->query("CREATE TABLE $name ($architecture)");
        return $result;
    }
    //***********
    //Объектные методы
    public function add($values)
    {
        query("INSERT INTO $this->Name VALUES($values)");
    }
 
    public function customAdd($fields, $values)
    {
        query("INSERT INTO $this->Name($fields) VALUES($values)");
    }
 
    public function select($options, $predicate = "")
    {
        return query("SELECT $options FROM $this->Name $predicate");
    }
 
    public function delete($predicate)
    {
        $this->query("DELETE FROM $this->Name $predicate");
    }
 
    public function update($fieldsUpdate, $predicate = "")
    {
        $this->query("UPDATE $this->Name SET $fieldsUpdate $predicate");
    }
}
Тест - код :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
/**
 * Created by PhpStorm.
 * User: RAE
 * Date: 02.09.2017
 * Time: 15:06
 */
include "SQLDatabase.php";
$db = SQLDatabase::Load("pings", "root");
$db->newTable("main","`name` varchar(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `sword` text NOT NULL,
    `ip` VARCHAR(11) NOT NULL");
echo "Succes!@";
И ошибки нет и таблицы нет.
Вообще пробовал через phpmyadmin писать вручную запросы и выяснил вот что :
Использовал кавычки я зря )
Только символ `.
Например
SQL
1
CREATE TABLE main (`name` VARCHAR(20) NOT NULL AUTO_INCREMENT PRIMARY KEY, `sword` text NOT NULL, `ip` VARCHAR(11) NOT NULL);
Если name будет без этого обрамления , то ничего работать не будет , хотя на метоните так показано . наверно , версия mysql другая.
Если скопировать запрос моей программы -

А вот если написать что-то аналогичное через интерфейс
Я проверял , вроде и без Engine=... работает , но почему остальное то не работает. Может кодировку как-нибудь указать?
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
02.09.2017, 16:34  [ТС]
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
А попробовать самому что мешает?
Рациональность.
Зачем тратить время на проверку , когда можно занести лишний вопросик к главному и подарить халявное спасибо отзывчивому человеку.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
02.09.2017, 17:07
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Что бы облегчить навигацию по коду
Наличие тайпхинтов как раз и облегчает навигацию по коду.
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Ну исходный код у меня есть , достаточно в него заглянуть
Взглянул. Например метод newTable. Что за параметр $architecture. Придется лезть в метод createNew и пытаться там найти ответ на свой вопрос.
И если я передам туда значение другого типа, то сообщения об ошибках будут нести больше информации

Добавлено через 2 минуты
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Рациональность.
Зачем тратить время на проверку , когда можно занести лишний вопросик к главному и подарить халявное спасибо отзывчивому человеку.
Надо потратить время на написание поста. Дождаться когда кто-нибудь ответит, и ответят ли вообще. К тому же знания полученные на собственном опыте лучше запоминаются
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
02.09.2017, 17:14
53, 58, 63 строчки - похоже забыли $this.
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
02.09.2017, 17:23  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Надо потратить время на написание поста. Дождаться когда кто-нибудь ответит, и ответят ли вообще.
Все зависит от приоритета информации , так что если не срочно , а так , знания для удовлетворения легкого любопытства , то можно и подождать.
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Наличие тайпхинтов как раз и облегчает навигацию по коду.
Что такое тайпхинт ? Моя навигация это : файлы , область редактирования и имена - все что есть.
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Взглянул. Например метод newTable. Что за параметр $architecture. Придется лезть в метод createNew и пытаться там найти ответ на свой вопрос.
И если я передам туда значение другого типа, то сообщения об ошибках будут нести больше информации
Да бесспорно , если бы указания ожидаемого типа не несло никакой пользы , то и вопросов бы не было.
А есть у кого доводы по поводу mysql ошибки?

Добавлено через 2 минуты
Цитата Сообщение от Jodah Посмотреть сообщение
53, 58, 63 строчки - похоже забыли $this.
Да. Прям геморрой , уже во второй теме это говорят.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
02.09.2017, 18:38
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
А есть у кого доводы по поводу mysql ошибки?
Пусть mysql сама скажет.
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
PHP
1
return mysqli_query($this->Database, $Query);
Добавьте проверку на ошибки, примеры тут.
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
03.09.2017, 16:54  [ТС]
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
`name` VARCHAR(20) NOT NULL AUTO_INCREMENT PRIMARY KEY
Что-то в базе данных должно являться идентификатором записи... Ну вообщем тупой копипаст и "модификация это страшные вещи". Взгляните на строку - тип поля name - текст в 20 символов , интересно как произойдет auto_increment)))Щас взгянул и прям осенило.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2017, 16:54
Помогаю со студенческими работами здесь

Модификатор доступа const
Здравсвуйте, прошу помочь с вопросом. В общем имеется такой класс: class Animator : public sf::Drawable { private: ...

Модификатор доступа к переменным кадра
Здравствуйте, как получить доступ к переменной 1 - го кадра с 2- го кадра? есть переменная в 1 кадре, как ее считать ли перезаписать у 2...

WPF модификатор доступа элемента
Есть квадрат называется r1 как сделать его public, чтоб из класса юзать, в WPF. Спасибо.

Как поменять модификатор доступа к полю?
Задание было в следующем: Описать класс «процессор», содержащий сведения о марке, тактовой частоте, объеме кэша и стоимости. Предусмотреть...

Модификатор доступа protected. Не понятен смысл
Модификатор доступа protected используется тогда, когда мы хотим, чтобы элемент был виден за пределами текущего пакета только тем классам,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru