В новых версиях PHP (5 и), вызвана функция __ constuct каждый раз, когда Вы используете "новый {Объект}", поэтому если Вы хотите передать данные в объект, добавьте параметры к функции конструкции и затем звоните
$obj = new Object($some, $parameters);
class Object {
function __construct($one, $two) {}
}
, Именованные конструкторы поэтапно осуществляются из PHP в пользу __ метод конструкции.
Возможно, вы ищете не тот ответ, но я не смог удержаться от написания сценария VIM для этого. Я помещаю его в свой .vimrc, и он у меня работает:
map ; :call Semicolon()<CR>
function Semicolon()
let s:pos1 = getpos(".")
normal! ;
let s:pos2 = getpos(".")
if s:pos1 == s:pos2
normal! 2;
endif
endfunction
Основная идея заключается в том, что ;
не перейдет к следующему совпадению, но 2;
будет (если есть матч). Скрипт поддерживает ;
после любого из tTfF
. Самый простой способ реализовать команду ,
- написать аналогичную функцию для этого.
EDIT Изменил сценарий после прекрасного предложения Люка
EDIT2
Хорошо, эти вещи всегда труднее, чем я думал изначально. Текущее сопоставление имеет следующие проблемы:
tr
выше. Что теперь делать d;
или c;
? Насколько я понимаю, они должны удалять или изменять до первого r
, а не второго. Эту проблему можно решить, выполняя сопоставление только для обычного и визуального режима, но не для режима ожидания оператора. v ;;;;
после первого ;
, редактор больше не будет в визуальном режиме (из-за : call
). Это можно решить, вызвав функцию с использованием @ =
вместо : call
. Итак, теперь я получаю следующее в моем .vimrc (я также сделал одну функцию для ,
и ;
):
" Remap ; and , commands so they also work after t and T
" Only do the remapping for normal and visual mode, not operator pending
" Use @= instead of :call to prevent leaving visual mode
nmap ; @=FixCommaAndSemicolon(";")<CR>
nmap , @=FixCommaAndSemicolon(",")<CR>
vmap ; @=FixCommaAndSemicolon(";")<CR>
vmap , @=FixCommaAndSemicolon(",")<CR>
function FixCommaAndSemicolon(command)
let s:pos1 = getpos(".")
execute "normal! " . a:command
let s:pos2 = getpos(".")
if s:pos1 == s:pos2
execute "normal! 2" . a:command
endif
return ""
endfunction
Похоже, ваша проблема больше связана с поведением t
, а не ;
.
Допустим, в вашем примере вы начинаете с 'e':
stackov[e]rflow rocks
Полагаю, вы (разумно) ожидали, что tr
прыгнет вперед к [] скалам
, а не останется на месте.
Если это так, оставьте ;
как есть и, возможно, переназначьте t
на lt
или что-то в этом роде.
2 комментария один: Можете ли вы составить карту; к команде lt_, которую вы ищете? 2-й: Почему бы не использовать вместо 2tr или / r и n?