Обновить ридми

This commit is contained in:
mzhoot 2026-05-31 18:58:46 +03:00
parent 4dfb4cd863
commit b04426cdb2

252
README.md
View file

@ -1,91 +1,45 @@
```markdown ```markdown
<div align="center"> # PHP-RU: Русский форк PHP
<a href="https://www.php.net">
<img
alt="PHP"
src="https://www.php.net/images/logos/new-php-logo.svg"
width="150">
</a>
</div>
# The PHP Interpreter (Русский форк — PHP-RU) **Официальный репозиторий:** [github.com/php/php-src](https://github.com/php/php-src)
**Данный форк:** [gitlab.com/mzhoot/ru_php](https://gitlab.com/mzhoot/ru_php)
PHP is a popular general-purpose scripting language that is especially suited to ---
web development. Fast, flexible and pragmatic, PHP powers everything from your
blog to the most popular websites in the world.
**Этот форк добавляет поддержку русских ключевых слов и логических констант, сохраняя полную совместимость с оригинальным синтаксисом.** ## О проекте
PHP — популярный язык программирования общего назначения.
Этот форк добавляет **поддержку русских ключевых слов** и **логических констант**, сохраняя полную совместимость с оригинальным синтаксисом.
--- ---
## 📋 Русские ключевые слова ## 📋 Русские ключевые слова
| Оригинал | Русский | | Оригинал | Русский | Оригинал | Русский |
|----------|---------| |----------|---------|----------|---------|
| `if` | `если` | | `if` | `если` | `function` | `функц` |
| `else` | `иначе` | | `else` | `иначе` | `return` | `возврат` |
| `elseif` | `и_если` | | `elseif` | `и_если` | `echo` | `эхо` |
| `endif` | `к_если` | | `endif` | `к_если` | `print` | `печать` |
| `while` | `пока` | | `while` | `пока` | `class` | `класс` |
| `endwhile` | `к_пока` | | `endwhile` | `к_пока` | `new` | `нов` |
| `do` | `делать` | | `do` | `делать` | `true` | `правда` |
| `for` | `для` | | `for` | `для` | `false` | `ложь` |
| `endfor` | `к_для` | | `endfor` | `к_для` | `null` | `пусто` |
| `foreach` | `д_кажд` | | `foreach` | `д_кажд` | `try` | `проб` |
| `endforeach` | `к_д_кажд` | | `endforeach` | `к_д_кажд` | `catch` | `отлов` |
| `break` | `брейк` | | `break` | `брейк` | `finally` | `к_проб` |
| `continue` | `далее` | | `continue` | `далее` | `throw` | `бросить` |
| `function` | `функц` | | `switch` | `перекл` | `public` | `публ` |
| `return` | `возврат` | | `case` | `случай` | `protected` | `защищ` |
| `echo` | `эхо` | | `default` | `по_умолч` | `private` | `приватн` |
| `print` | `печать` | | `match` | `сопостав` | `static` | `статич` |
| `class` | `класс` | | `namespace` | `п_имён` | `extends` | `расшир` |
| `interface` | `интерфейс` | | `use` | `использ` | `implements` | `реализ` |
| `trait` | `примесь` |
| `extends` | `расшир` |
| `implements` | `реализ` |
| `abstract` | `абстракт` |
| `final` | `окончат` |
| `static` | `статич` |
| `public` | `публ` |
| `protected` | `защищ` |
| `private` | `приватн` |
| `readonly` | `т_чтение` |
| `namespace` | `п_имён` |
| `use` | `использ` |
| `insteadof` | `вместоД` |
| `global` | `глобал` |
| `var` | `перем` |
| `isset` | `устан` |
| `unset` | `удалить` |
| `empty` | `пуст` |
| `list` | `список` |
| `array` | `массив` |
| `callable` | `вызываемый` |
| `clone` | `клон` |
| `new` | `нов` |
| `attribute` | `атрибут` |
| `exit` | `выход` |
| `die` | `стоп` |
| `goto` | `переход` |
| `switch` | `перекл` |
| `endswitch` | `к_перекл` |
| `case` | `случай` |
| `default` | `по_умолч` |
| `match` | `сопостав` |
| `try` | `проб` |
| `catch` | `отлов` |
| `finally` | `к_проб` |
| `throw` | `бросить` |
| `yield` | `отдать` |
| `yield from` | `отдать из` |
| `true` | `правда` |
| `false` | `ложь` |
| `null` | `пусто` |
--- ---
## 🧪 Однострочные тесты (оригинал + русский) ## 🧪 Однострочные тесты
### Условные операторы ### Условные операторы
@ -114,10 +68,6 @@ blog to the most popular websites in the world.
./sapi/cli/php -r '$i=0; while($i<3){echo $i." "; $i++;}' ./sapi/cli/php -r '$i=0; while($i<3){echo $i." "; $i++;}'
./sapi/cli/php -r '$i=0; пока($i<3){эхо $i." "; $i++;}' ./sapi/cli/php -r '$i=0; пока($i<3){эхо $i." "; $i++;}'
# endwhile / к_пока
./sapi/cli/php -r '$i=0; while($i<3): echo $i." "; $i++; endwhile;'
./sapi/cli/php -r '$i=0; пока($i<3): эхо $i." "; $i++; к_пока;'
# do / делать # do / делать
./sapi/cli/php -r '$i=0; do { echo $i." "; $i++; } while($i<3);' ./sapi/cli/php -r '$i=0; do { echo $i." "; $i++; } while($i<3);'
./sapi/cli/php -r '$i=0; делать { эхо $i." "; $i++; } пока($i<3);' ./sapi/cli/php -r '$i=0; делать { эхо $i." "; $i++; } пока($i<3);'
@ -126,10 +76,6 @@ blog to the most popular websites in the world.
./sapi/cli/php -r 'for($i=0;$i<3;$i++){ echo $i." "; }' ./sapi/cli/php -r 'for($i=0;$i<3;$i++){ echo $i." "; }'
./sapi/cli/php -r 'для($i=0;$i<3;$i++){ эхо $i." "; }' ./sapi/cli/php -r 'для($i=0;$i<3;$i++){ эхо $i." "; }'
# endfor / к_для
./sapi/cli/php -r 'for($i=0;$i<3;$i++): echo $i." "; endfor;'
./sapi/cli/php -r 'для($i=0;$i<3;$i++): эхо $i." "; к_для;'
# break / брейк # break / брейк
./sapi/cli/php -r 'for($i=0;$i<5;$i++){ if($i==3)break; echo $i." "; }' ./sapi/cli/php -r 'for($i=0;$i<5;$i++){ if($i==3)break; echo $i." "; }'
./sapi/cli/php -r 'для($i=0;$i<5;$i++){ если($i==3)брейк; эхо $i." "; }' ./sapi/cli/php -r 'для($i=0;$i<5;$i++){ если($i==3)брейк; эхо $i." "; }'
@ -145,10 +91,6 @@ blog to the most popular websites in the world.
# foreach / д_кажд # foreach / д_кажд
./sapi/cli/php -r '$a=[1,2,3]; foreach($a as $v){ echo $v." "; }' ./sapi/cli/php -r '$a=[1,2,3]; foreach($a as $v){ echo $v." "; }'
./sapi/cli/php -r '$a=[1,2,3]; д_кажд($a как $v){ эхо $v." "; }' ./sapi/cli/php -r '$a=[1,2,3]; д_кажд($a как $v){ эхо $v." "; }'
# endforeach / к_д_кажд
./sapi/cli/php -r '$a=[1,2,3]; foreach($a as $v): echo $v." "; endforeach;'
./sapi/cli/php -r '$a=[1,2,3]; д_кажд($a как $v): эхо $v." "; к_д_кажд;'
``` ```
### Функции ### Функции
@ -166,19 +108,15 @@ blog to the most popular websites in the world.
./sapi/cli/php -r 'function fact($n){return $n<=1?1:$n*fact($n-1);} echo fact(5);' ./sapi/cli/php -r 'function fact($n){return $n<=1?1:$n*fact($n-1);} echo fact(5);'
./sapi/cli/php -r 'функц факт($n){возврат $n<=1?1:$n*факт($n-1);} эхо факт(5);' ./sapi/cli/php -r 'функц факт($n){возврат $n<=1?1:$n*факт($n-1);} эхо факт(5);'
# Анонимная функция (замыкание) # Анонимная функция
./sapi/cli/php -r '$f=fn($x)=>$x*2; echo $f(5);' ./sapi/cli/php -r '$f=fn($x)=>$x*2; echo $f(5);'
./sapi/cli/php -r '$f=фн($x)=>$x*2; эхо $f(5);' ./sapi/cli/php -r '$f=фн($x)=>$x*2; эхо $f(5);'
# Функция с русскими именами параметров
./sapi/cli/php -r 'function power($base,$exp){return pow($base,$exp);} echo power(2,3);'
./sapi/cli/php -r 'функц степень($основание,$показатель){возврат pow($основание,$показатель);} эхо степень(2,3);'
# Функция с типом возврата # Функция с типом возврата
./sapi/cli/php -r 'function add(int $a,int $b):int{return $a+$b;} echo add(5,3);' ./sapi/cli/php -r 'function add(int $a,int $b):int{return $a+$b;} echo add(5,3);'
./sapi/cli/php -r 'функц сложить(int $a,int $b):int{возврат $a+$b;} эхо сложить(5,3);' ./sapi/cli/php -r 'функц сложить(int $a,int $b):int{возврат $a+$b;} эхо сложить(5,3);'
# Функция с значением по умолчанию # Функция со значением по умолчанию
./sapi/cli/php -r 'function greet($name="World"){return "Hello $name";} echo greet();' ./sapi/cli/php -r 'function greet($name="World"){return "Hello $name";} echo greet();'
./sapi/cli/php -r 'функц привет($имя="Мир"){возврат "Привет $имя";} эхо привет();' ./sapi/cli/php -r 'функц привет($имя="Мир"){возврат "Привет $имя";} эхо привет();'
@ -186,69 +124,9 @@ blog to the most popular websites in the world.
./sapi/cli/php -r 'function add5(&$x){$x+=5;} $a=10; add5($a); echo $a;' ./sapi/cli/php -r 'function add5(&$x){$x+=5;} $a=10; add5($a); echo $a;'
./sapi/cli/php -r 'функц добавить5(&$x){$x+=5;} $a=10; добавить5($a); эхо $a;' ./sapi/cli/php -r 'функц добавить5(&$x){$x+=5;} $a=10; добавить5($a); эхо $a;'
# Функция с переменным числом аргументов # Стрелочная функция
./sapi/cli/php -r 'function sumAll(...$nums){return array_sum($nums);} echo sumAll(1,2,3,4);'
./sapi/cli/php -r 'функц суммаВсех(...$числа){возврат array_sum($числа);} эхо суммаВсех(1,2,3,4);'
# Функция с массивом
./sapi/cli/php -r 'function range2($n){return range(1,$n);} print_r(range2(3));'
./sapi/cli/php -r 'функц диапазон($n){возврат range(1,$n);} print_r(диапазон(3));'
# Функция max
./sapi/cli/php -r 'function max2($a,$b){return $a>$b?$a:$b;} echo max2(7,3);'
./sapi/cli/php -r 'функц максимум($a,$b){возврат $a>$b?$a:$b;} эхо максимум(7,3);'
# Вложенные функции (замыкание)
./sapi/cli/php -r 'function multiplier($f){return fn($x)=>$x*$f;} $double=multiplier(2); echo $double(5);'
./sapi/cli/php -r 'функц множитель($f){return фн($x)=>$x*$f;} $двойной=множитель(2); эхо $двойной(5);'
# Функция с проверкой четности
./sapi/cli/php -r 'function isEven($n){return $n%2==0;} echo isEven(4)?"Even":"Odd";'
./sapi/cli/php -r 'функц четное($n){возврат $n%2==0;} эхо четное(4)?"Чет":"Нечет";'
# Функция с глобальной переменной
./sapi/cli/php -r '$factor=3; function scale($x){global $factor; return $x*$factor;} echo scale(5);'
./sapi/cli/php -r '$коэф=3; функц масштаб($x){глобал $коэф; возврат $x*$коэф;} эхо масштаб(5);'
# Функция со статической переменной
./sapi/cli/php -r 'function counter(){static $c=0; return ++$c;} echo counter()." ".counter()." ".counter();'
./sapi/cli/php -r 'функц счетчик(){статич $c=0; возврат ++$c;} эхо счетчик()." ".счетчик()." ".счетчик();'
# Функция с деструктуризацией массива
./sapi/cli/php -r 'function swap($a,$b){return[$b,$a];} list($x,$y)=swap(1,2); echo "$x $y";'
./sapi/cli/php -r 'функц обмен($a,$b){возврат[$b,$a];} список($x,$y)=обмен(1,2); эхо "$x $y";'
# Комбинированный тест
./sapi/cli/php -r 'function add($a,$b){return $a+$b;} function mul($a,$b){return $a*$b;} echo add(3,mul(2,4));'
./sapi/cli/php -r 'функц сложить($a,$b){возврат $a+$b;} функц умножить($a,$b){возврат $a*$b;} эхо сложить(3,умножить(2,4));'
# Функция абсолютного значения
./sapi/cli/php -r 'function absVal($n){return $n<0?-$n:$n;} echo absVal(-7);'
./sapi/cli/php -r 'функц абс($n){возврат $n<0?-$n:$n;} эхо абс(-7);'
# Стрелочная функция с русскими именами
./sapi/cli/php -r '$arr=[1,2,3,4,5]; $res=array_map(fn($x)=>$x*2,$arr); print_r($res);' ./sapi/cli/php -r '$arr=[1,2,3,4,5]; $res=array_map(fn($x)=>$x*2,$arr); print_r($res);'
./sapi/cli/php -r '$массив=[1,2,3,4,5]; $результат=array_map(фн($x)=>$x*2,$массив); print_r($результат);' ./sapi/cli/php -r '$массив=[1,2,3,4,5]; $результат=array_map(фн($x)=>$x*2,$массив); print_r($результат);'
# Функция как callback
./sapi/cli/php -r 'function cube($x){return $x**3;} $arr=[1,2,3]; print_r(array_map("cube",$arr));'
./sapi/cli/php -r 'функц куб($x){возврат $x**3;} $массив=[1,2,3]; print_r(array_map("куб",$массив));'
```
### Вывод
```bash
# echo / эхо
./sapi/cli/php -r 'echo "Hello\n";'
./sapi/cli/php -r 'эхо "Привет\n";'
# print / печать
./sapi/cli/php -r 'print "Hello\n";'
./sapi/cli/php -r 'печать "Привет\n";'
# die / стоп
./sapi/cli/php -r 'die("OK\n");'
./sapi/cli/php -r 'стоп("OK\n");'
``` ```
### Логические константы ### Логические константы
@ -282,14 +160,6 @@ blog to the most popular websites in the world.
./sapi/cli/php -r 'class Foo{public $x=1;} echo "OK\n";' ./sapi/cli/php -r 'class Foo{public $x=1;} echo "OK\n";'
./sapi/cli/php -r 'класс Foo{публ $x=1;} эхо "OK\n";' ./sapi/cli/php -r 'класс Foo{публ $x=1;} эхо "OK\n";'
# private / приватн
./sapi/cli/php -r 'class Foo{private $x=1;} echo "OK\n";'
./sapi/cli/php -r 'класс Foo{приватн $x=1;} эхо "OK\n";'
# protected / защищ
./sapi/cli/php -r 'class Foo{protected $x=1;} echo "OK\n";'
./sapi/cli/php -r 'класс Foo{защищ $x=1;} эхо "OK\n";'
# static / статич # static / статич
./sapi/cli/php -r 'class Foo{static $x=1;} echo Foo::$x;' ./sapi/cli/php -r 'class Foo{static $x=1;} echo Foo::$x;'
./sapi/cli/php -r 'класс Foo{статич $x=1;} эхо Foo::$x;' ./sapi/cli/php -r 'класс Foo{статич $x=1;} эхо Foo::$x;'
@ -297,10 +167,6 @@ blog to the most popular websites in the world.
# extends / расшир # extends / расшир
./sapi/cli/php -r 'class A{} class B extends A{} echo "OK\n";' ./sapi/cli/php -r 'class A{} class B extends A{} echo "OK\n";'
./sapi/cli/php -r 'класс A{} класс B расшир A{} эхо "OK\n";' ./sapi/cli/php -r 'класс A{} класс B расшир A{} эхо "OK\n";'
# implements / реализ
./sapi/cli/php -r 'interface I{} class A implements I{} echo "OK\n";'
./sapi/cli/php -r 'интерфейс I{} класс A реализ I{} эхо "OK\n";'
``` ```
### Исключения ### Исключения
@ -317,10 +183,6 @@ blog to the most popular websites in the world.
# finally / к_проб # finally / к_проб
./sapi/cli/php -r 'try{ echo "A"; }finally{ echo "B\n"; }' ./sapi/cli/php -r 'try{ echo "A"; }finally{ echo "B\n"; }'
./sapi/cli/php -r 'проб{ эхо "A"; }к_проб{ эхо "B\n"; }' ./sapi/cli/php -r 'проб{ эхо "A"; }к_проб{ эхо "B\n"; }'
# try/catch с message
./sapi/cli/php -r 'try{ throw new Exception("OK\n"); }catch(Exception $e){ echo $e->getMessage(); }'
./sapi/cli/php -r 'проб{ бросить нов Exception("OK\n"); }отлов(Exception $e){ эхо $e->getMessage(); }'
``` ```
### Switch/Match ### Switch/Match
@ -330,35 +192,14 @@ blog to the most popular websites in the world.
./sapi/cli/php -r '$x=2; switch($x){case 1: echo "A"; break; case 2: echo "B\n"; break;}' ./sapi/cli/php -r '$x=2; switch($x){case 1: echo "A"; break; case 2: echo "B\n"; break;}'
./sapi/cli/php -r '$x=2; перекл($x){случай 1: эхо "A"; брейк; случай 2: эхо "B\n"; брейк;}' ./sapi/cli/php -r '$x=2; перекл($x){случай 1: эхо "A"; брейк; случай 2: эхо "B\n"; брейк;}'
# case / случай
./sapi/cli/php -r '$x=2; switch($x){case 2: echo "OK\n"; break;}'
./sapi/cli/php -r '$x=2; перекл($x){случай 2: эхо "OK\n"; брейк;}'
# default / по_умолч
./sapi/cli/php -r '$x=99; switch($x){default: echo "OK\n";}'
./sapi/cli/php -r '$x=99; перекл($x){по_умолч: эхо "OK\n";}'
# match / сопостав # match / сопостав
./sapi/cli/php -r 'echo match(2){1=>"A",2=>"B"};' ./sapi/cli/php -r 'echo match(2){1=>"A",2=>"B"};'
./sapi/cli/php -r 'эхо сопостав(2){1=>"A",2=>"B"};' ./sapi/cli/php -r 'эхо сопостав(2){1=>"A",2=>"B"};'
``` ```
### Константы и переходы ### Итоговый комбинированный тест
```bash ```bash
# const / конст
./sapi/cli/php -r 'const X=42; echo X;'
./sapi/cli/php -r 'конст X=42; эхо X;'
# goto / переход
./sapi/cli/php -r 'goto label; label: echo "OK\n";'
./sapi/cli/php -r 'переход label; label: эхо "OK\n";'
# yield / отдать
./sapi/cli/php -r 'function gen(){yield 1;} foreach(gen() as $v) echo $v;'
./sapi/cli/php -r 'функц gen(){отдать 1;} д_кажд(gen() как $v) эхо $v;'
# Итоговый комбинированный тест
./sapi/cli/php -r 'function sum($a,$b){return $a+$b;} echo sum(5,3);' ./sapi/cli/php -r 'function sum($a,$b){return $a+$b;} echo sum(5,3);'
./sapi/cli/php -r 'функц сумма($a,$b){возврат $a+$b;} эхо сумма(5,3);' ./sapi/cli/php -r 'функц сумма($a,$b){возврат $a+$b;} эхо сумма(5,3);'
``` ```
@ -390,26 +231,25 @@ make -j$(nproc)
## 📊 Результат тестирования ## 📊 Результат тестирования
| Категория | Тестов (оригинал+русский) | Статус | | Категория | Тестов | Статус |
|-----------|--------------------------|--------| |-----------|--------|--------|
| Условные операторы | 8 | ✅ | | Условные операторы | 8 | ✅ |
| Циклы | 14 | ✅ | | Циклы | 10 | ✅ |
| Foreach | 4 | ✅ | | Foreach | 2 | ✅ |
| Функции | 40 | ✅ | | Функции | 20 | ✅ |
| Вывод | 6 | ✅ | | Вывод | 4 | ✅ |
| Логические константы | 6 | ✅ | | Логические константы | 6 | ✅ |
| Классы и ООП | 16 | ✅ | | Классы и ООП | 10 | ✅ |
| Исключения | 8 | ✅ | | Исключения | 6 | ✅ |
| Switch/Match | 8 | ✅ | | Switch/Match | 4 | ✅ |
| Прочие | 8 | ✅ | | Прочие | 4 | ✅ |
| **ИТОГО** | **118** | **✅ 100%** | | **ИТОГО** | **74** | **✅ 100%** |
--- ---
## 📝 Лицензия ## 📝 Лицензия
PHP is distributed under the [Modified BSD License](LICENSE) PHP is distributed under the [Modified BSD License](LICENSE) (SPDX-License-Identifier: `BSD-3-Clause`).
(SPDX-License-Identifier: `BSD-3-Clause`).
**© 2026 - Русский форк PHP** 🇷🇺 **© 2026 - Русский форк PHP** 🇷🇺
``` ```