Вход

PHP

Научись общаться с машиной и научи других. Все вопросы связанные с программированием и разработкой программ.

Модератор: AxeL

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
15 декабря 2010 в 21:56

Может кто посоветовать статью какую или еще что по регулярным выражениям? Я вообще понять не могу формирования...

Сейчас встала проблема вычистить все кроме [A-Za-zА-Яа-я], но что-то php строку превращает в г..но...
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
15 декабря 2010 в 22:12

daggert, http://htmlweb.ru/php/example/preg.php вот тут много примеров. В принципе я по этой статье многому научился
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
15 декабря 2010 в 23:00

DisKom, пасип. Но там примеры... Как-то хочется разобраться в логике построения регулярок... Пока я не могу их понять...
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
15 декабря 2010 в 23:06

омг, что за вопросы. гугл + вики + "регулярные выражения"
про POSIX-формат читай. кажется это в общем то и в мануале пхп было описано.
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
15 декабря 2010 в 23:17

teran, то что нашел - либо уже выше по уровню, либо примеры. А разбора как такового не могу найти.
Прочел несколько англоязычных форумов, но все равно выражения типа [code:1]"/\s(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\..-]*[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i"[/code:1] для меня пока темный лес.

Да и на форуме у людей спросить - святое дело.
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
15 декабря 2010 в 23:39

дак причем здесь разбор примеров то. первая ссылка в гугле по моему примерами не особо изобилует, а там текст какой то
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
15 декабря 2010 в 23:55

teran, да как-то не особо понятно всеже... Прочитав его всеравно не понял как строятся мегавыражения приведенные выше.
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
16 декабря 2010 в 00:19

daggert, ну как бы знаешь, я вроде раньше тоже работал с регулярками, не очень часто, но оно все было вполне понятно, и выражение приведенное выше для меня тоже темный лес. так что начинать надо с примеров попроще.
0

Сообщение Гость 16 декабря 2010 в 00:19

а на википедии чем объяснение не устраивает?
там кратко изложены все основы, кубики из которых строятся мегавыражения приведенные выше.
от простого к сложному, главное начать использовать их самостоятельно, и сложные потом покажутся простыми
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
16 декабря 2010 в 00:33

teran, Гость, это я понимаю что надо с простого. Пробовал разбивать сложные выражения на простые - все равно в тупик захожу...

Просто сталкиваюсь последнее время (красноглазый Linux) с такого рода вещами...
0

Сообщение спящий 19 декабря 2010 в 22:19

есть книга:
http://www.infanata.com/computers/prog/1146115505-fridl-regulyarnye-vyrazheniya-3-e-izdanie.html

Вообще-то наверное можешь в книга по Perl поискать...
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
20 декабря 2010 в 00:43

спящий, пасип. Попробую найти на прилавках.
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
29 января 2011 в 03:05

str_replace(Array(var[1..n]), Array(text[1..n]), $template)
то-же самое что
str_replace($var[1], $text[1], $template);
str_replace($var[2], $text[2], $template);
str_replace($var[n], $text[n], $template);
или если этой функции передать массив она по другому будет работать? Точнее как: Результат-то один и тот-же, это понятно, а вот способы - есть-ли потеря скорости или и т.п.?
0

Сообщение Гость 29 января 2011 в 19:19


mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

If search and replace are arrays, then str_replace() takes a value from each array and uses them to search and replace on subject.

-- http://php.net/manual/en/function.str-replace.php


Цикл перебора элементов массивов реализован внутри функции.
Разумеется, можно реализовать этот цикл самому с потерей быстродействия.
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
29 января 2011 в 20:33

Гость, про потери ничего не написано... В этом все дело. Реализуется-ли там собственный цикл, либо foreach обычный?
0

Сообщение Гость 29 января 2011 в 23:39


про потери ничего не написано



str_replace() takes a value from each array


Функция str_replace() реализована на низком уровне.
Очевидно, что перебор элементов массивов на низком уровне займет меньшее время, чем тоже самое, но на высоком.


Реализуется-ли там собственный цикл, либо foreach обычный ?


Это можно узнать, взглянув на реализацию функции str_replace.
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
13 февраля 2011 в 19:27

Помогите решить проблемку.
Имеется один класс (Class1). В нем есть функция f1.
Имеется второй класс (Class2), в котором должна быть использована функция f1.
Использовать наследование не хочется.

Решил проблему через такой костыль:

[code:1]class Class1{
function f1(){
echo "f1";
}
}

global $class1;
$class1 = new Class1();[/code:1]

[code:1]class Class2{
function f2(){
global $class1;

$class1->f1();
}
}

$class2 = new Class2();[/code:1]
В итоге
[code:1]$class2->f2();[/code:1]
выводит как раз "f1".

Есть ли какой-нибудь более правильный метод решения проблемы?
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
13 февраля 2011 в 20:10

ну дак передай в объект класса 2 ссылку на объект класса 1 да и все.

[code:1]
class Class2 {
var $x = NULL;
setObject(&tmp){
$x = $tmp;
}
callMethod(){
if($x != NULL) $x->f1();
}
}

$testObject = new Class1();

$test = new Class2();
$test->setObject($testObject)

$test->CallMethod();
[/code:1]
за код простите, синтаксиса уже не помню (:

если пишешь код с использованием классов, то забывай про эти global.
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
14 февраля 2011 в 02:49

teran, под сие замес спрошу: Есть-ли какая-то выгода в использовании private от public?
0
Продвинутый

СообщениеПродвинутый sky_dweller sky_dweller 3
Оставил 463 сообщений с 07 май 2010
ФР: -45529
14 февраля 2011 в 09:23

daggert писал(а):teran, под сие замес спрошу: Есть-ли какая-то выгода в использовании private от public?

Конечно! private реализует инкапсуляцию, а это один из 4-х столбов ооп.
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
14 февраля 2011 в 09:57

daggert писал(а):teran, под сие замес спрошу: Есть-ли какая-то выгода в использовании private от public?

ну естественно,
[code:1]
class A{
priavate
asd(){ return 0;}
}[/code:1]
метод asd может быть вызван только как $this->asd(), т.е никакой другой класс (сторонний или наследник) не имеет доступа к данному методу (свойству/члену класса).
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
14 февраля 2011 в 11:30

Тобишь
[code:1]
class A
{
private $var;
function __construct($str)
{
$this->var = $str;
}
}
class B extends A
{
function __construct()
{
echo $this->var;
}
}
[/code:1]
Не будет работать?
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
14 февраля 2011 в 13:06

не будет.
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
14 февраля 2011 в 13:52

teran, тогда не имеет смысла делать extends для классов с private переменными?
0
В авторитете

СообщениеВ авторитете Roman_ Roman_ 1
Оставил 2718 сообщений с 23 янв 2004
ФР: 2468
14 февраля 2011 в 14:38

daggert, имеет. Ибо методы класса-родителя то могут работать со своими приватными методоми и переменными
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
14 февраля 2011 в 15:29

daggert, почему не имеет?
private переменная/метод предназначена для использования только внутри класса, возможно эти переменные тебе и не понадобятся в классе потомке.
т.е все зависит от ситуации, если у тебя это какая то рабочая переменная для внутренних нужд, то ты ее делаешь private, тогда кроме тебя самого никто не может изменить эту переменную.

если тебе требуется чтобы к переменно/методу имели доступ потомки, то ты определяешь ее как protected.

если тебе необходимо, чтобы к переменной могли обращаться из вне, то она public.

добавлено спустя 46 минут:

Roman_ писал(а):daggert, имеет. Ибо методы класса-родителя то могут работать со своими приватными методоми и переменными

немножко мб поясню.

класс потомок, может вызвать protected/public метод родителя, который в свою очередь будет работать с private членами класса. тогда потомок знать ничего о родительском устройстве внутреннем не будет, но родитель сам их использует в работе.
0

Сообщение Гость 14 февраля 2011 в 18:44


не имеет смысла делать extends для классов с private переменными ?


http://en.wikipedia.org/wiki/Mutator_method#PHP_example
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
14 февраля 2011 в 19:07

Гость, и к чему ваша ссылка? вопрос был не о том, как описать Private член класса.
0

Сообщение Гость 14 февраля 2011 в 19:39

teran, а причем здесь описание ?
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
14 февраля 2011 в 21:05

ну изначально вопрос был про наследование, и про то что класс наследник не видит private члены родителя.

ваша ссылка на пример кода в котором public методы используют private переменную класса, и к наследованию отношения не имеет.
0

Сообщение Гость 14 февраля 2011 в 21:12


к наследованию отношения не имеет.


А аксессоры/мутаторы в потомке использовать нельзя ?
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
14 февраля 2011 в 21:24

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

Можно я тут рабочий пример оставлю. Может кому и пригодится. (А вообще просто боюсь сам забыть, а так всегда буду знать где посмотреть)

[code:1]class Class1{
function f1(){
echo "f1";
}
}

class Class2 {
public $x = NULL;

function __construct($tmp){
$this->x = $tmp;
}

function callMethod(){
if($this->x != NULL) $this->x->f1();
}
}

$t1 = new Class1();
$t2 = new Class2($t1);

$t2->CallMethod(); // "f1"[/code:1]
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
14 февраля 2011 в 22:36

при чем тут свойства классов? (: можно конечно, раз уж они паблик.
не сразу понял что вы хотели сказать этим кусочком кода (: так что дискуссию закончим. умозаключение остается прежним, private члены класса родителя, могут быть доступным с использованием видимых потомку свойств и методов, как продемонстрировано по вышеприведенной ссылке.
0

Сообщение Гость 14 февраля 2011 в 23:12


не имеет смысла делать extends для классов с private переменными ?


Воспринял данный вопрос следующим образом: каким образом производному классу получить доступ к private-членам базового класса.
Аксессоры/мутаторы предоставляют доступ к private-членам класса, поэтому могут быть использованы объектами производного класса.
Т.е. фактически это синоним вашей фразы


private члены класса родителя, могут быть доступным с использованием видимых потомку свойств и методов
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
15 февраля 2011 в 03:03

Гость, teran, Roman_, пасип, разобрался.

**Успешно курю ООП в РНР...
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
15 февраля 2011 в 21:40

teran, я всего лишь был на не своем компьютере и для того, чтобы код не потерялся, я скинул его на форум. Но забудем это, так как я все равно разобрался как необходимо было поступить в этой ситуации.
0
Бессмертный

СообщениеБессмертный opc opc 0
Оставил 17768 сообщений с 29 мар 2007
ФР: 22048
ICQ
21 марта 2011 в 00:06

Можно ли средствами php узнать, выводиться ли страница в браузере напрямую или через iframe?
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
22 марта 2011 в 23:55

Помогите разобраться в вопросе.
Загружаю файл на сервер, затем пытаюсь перекинуть его в другую папку командой move_uploaded_file(). Ситуация следующая. Если на папке, в которую хочу перекинуть файл, стоят права 755, то ничего не выходит, а если 777, то все пучком. Но 777 как-то не очень безопасно. В чем может быть проблема? При этом в логах никаких ошибок нет, что более странно.
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
23 марта 2011 в 00:07

DisKom, а не может быть владелец файла другой, нежели тот который обращается?

Я просто всегда выставлял 777 ибо 755 никогда и не работало...
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
23 марта 2011 в 00:58

daggert, так а я впервые не могу выставить 755. У меня даже права 751 раньше были.
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
23 марта 2011 в 01:36

у апача права на запись в папку есть?
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
23 марта 2011 в 16:54

teran, а как это можно проверить? Конечно спрошу сейчас у хостера.
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
23 марта 2011 в 17:20

ну вот ты права выставляешь на папку: 7 7 7
первая цифра - маска для владельца
вторая - группа
третья - все остальные

правда ставятся по типу r,w,x - Read(4)/write(2)/execute(1)
где итоговым числом является битовая маска - сложение, т.е логическое ИЛИ
т.е например
r + w = 4 + 2 = 6
r + e = 4 + 1 = 5
w + e = 2 + 1 = 3

пхп ясно дело работает как модуль апача, апач запущен от имени какого то пользователя. Обычно для этих целей создается отдельный пользователь с именем например Apache/web/http, ну или как кому в голову прийдет.

Все махинации с файлами (в данном случае) которые ты проводишь в пхп, происходят от этого пользователя.

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

в любом случая если у тебя права доступа на директорию xx7 то апач по любому должен уметь туда писать файлы, что в прочем то ты и написал в первом своем посте.
так что лучше создай папку от своего имени, узнай имя группы, в которую входит пользователь от которого работает апач, смени группу для файла (chown YourAccountName:ApacheUserGroup DirName), и поставь права что нить типа 770
и права если надо, то рекурсивно меняй, ну если вложенность предполагается.
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
24 марта 2011 в 13:55

teran, ну вот попробую сейчас все это сделать. спасибо за мини-лекцию.
0

Сообщение Гость 8 апреля 2011 в 23:08

Подскажите пожалуйста, что использовать для вывода сообщений на странице после перезагрузки страницы. Например, сообщение об успешной регистрации. Пока подумываю о двух вариантах - куки и сессии.
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
9 апреля 2011 в 03:38

Гость, да равнозначно в принципе. Что то, что другое вполне одинаково исполняют свои роли...
0
Легенда форума

СообщениеЛегенда форума teran teran 111
Оставил 6656 сообщений с 23 янв 2004
ФР: 147260
12 апреля 2011 в 14:41

только куки могут быть запрещены пользователем.

добавлено спустя 3 минуты:

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

отсюда и выводы, что и для чего и когда использовать.

добавлено спустя 2 минуты:

а как сюда привязаны сообщения о завершении регистрации вообще ума не приложу.
вот ты форму пост-методом отправил, она обработалась, как результат выведено сообщение. при чем тут куки и сессии?
0
В авторитете

СообщениеВ авторитете DisKom DisKom 0
Оставил 2642 сообщений с 30 апр 2007
ФР: 12597
12 апреля 2011 в 21:54

teran писал(а):вот ты форму пост-методом отправил, она обработалась, как результат выведено сообщение. при чем тут куки и сессии?

Я, например, когда пользователь отправил форму на обработку, после операций с данными ставлю в конце header("Location:....."). Чтобы пользователь второй раз не отправил тоже самое. Так если были ошибки какие-то, то я их вывожу с помощью куки.
0

СообщениеНовичок g00dluck g00dluck 0
Оставил 6 сообщений с 26 ноя 2009
ФР: 167
12 апреля 2011 в 23:27

с сессиями можно так...

[code:1]class Flash {
public function setFlash($name, $value)
{
$msg = serialize($value);
$_SESSION['flash_message'][$name] = $msg;
}
public function getFlash($name, $default = null)
{
$msg = unserialize($_SESSION['flash_message'][$name]);
if ($msg == "")
return null;
unset($_SESSION['flash_message'][$name]);
return $msg;
}
public function hasFlash($name)
{
if (!$_SESSION['flash_message'][$name])
{
return false;
}
return true;
}
}[/code:1]
0

Сообщениеидиотъ daggert daggert 9
Оставил 11174 сообщений с 22 окт 2005
Блог: Просмотр блога (1)
ФР: 126247
WWW
14 мая 2011 в 15:58

Нет не у кого PECL binary-tools для windows? Офф сайт с марта лежит, а мне надо модуль собрать 8(
0



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1