From b04426cdb204b25efd22f18b07ce5dc17e2248ec Mon Sep 17 00:00:00 2001 From: mzhoot Date: Sun, 31 May 2026 18:58:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 254 ++++++++++-------------------------------------------- 1 file changed, 47 insertions(+), 207 deletions(-) diff --git a/README.md b/README.md index b3fb6b31..82903132 100644 --- a/README.md +++ b/README.md @@ -1,91 +1,45 @@ ```markdown -
- - PHP - -
+# PHP-RU: Русский форк PHP -# 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` | `если` | -| `else` | `иначе` | -| `elseif` | `и_если` | -| `endif` | `к_если` | -| `while` | `пока` | -| `endwhile` | `к_пока` | -| `do` | `делать` | -| `for` | `для` | -| `endfor` | `к_для` | -| `foreach` | `д_кажд` | -| `endforeach` | `к_д_кажд` | -| `break` | `брейк` | -| `continue` | `далее` | -| `function` | `функц` | -| `return` | `возврат` | -| `echo` | `эхо` | -| `print` | `печать` | -| `class` | `класс` | -| `interface` | `интерфейс` | -| `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` | `пусто` | +| Оригинал | Русский | Оригинал | Русский | +|----------|---------|----------|---------| +| `if` | `если` | `function` | `функц` | +| `else` | `иначе` | `return` | `возврат` | +| `elseif` | `и_если` | `echo` | `эхо` | +| `endif` | `к_если` | `print` | `печать` | +| `while` | `пока` | `class` | `класс` | +| `endwhile` | `к_пока` | `new` | `нов` | +| `do` | `делать` | `true` | `правда` | +| `for` | `для` | `false` | `ложь` | +| `endfor` | `к_для` | `null` | `пусто` | +| `foreach` | `д_кажд` | `try` | `проб` | +| `endforeach` | `к_д_кажд` | `catch` | `отлов` | +| `break` | `брейк` | `finally` | `к_проб` | +| `continue` | `далее` | `throw` | `бросить` | +| `switch` | `перекл` | `public` | `публ` | +| `case` | `случай` | `protected` | `защищ` | +| `default` | `по_умолч` | `private` | `приватн` | +| `match` | `сопостав` | `static` | `статич` | +| `namespace` | `п_имён` | `extends` | `расшир` | +| `use` | `использ` | `implements` | `реализ` | --- -## 🧪 Однострочные тесты (оригинал + русский) +## 🧪 Однострочные тесты ### Условные операторы @@ -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; пока($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 / делать ./sapi/cli/php -r '$i=0; do { echo $i." "; $i++; } while($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 'для($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 / брейк ./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." "; }' @@ -145,10 +91,6 @@ blog to the most popular websites in the world. # foreach / д_кажд ./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." "; }' - -# 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 'функц факт($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=фн($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 'функц сложить(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 'функц привет($имя="Мир"){возврат "Привет $имя";} эхо привет();' @@ -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 'функц добавить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 '$массив=[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 'класс 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 / статич ./sapi/cli/php -r 'class Foo{static $x=1;} echo 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 / расшир ./sapi/cli/php -r 'class A{} class B extends A{} echo "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 / к_проб ./sapi/cli/php -r 'try{ echo "A"; }finally{ echo "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 @@ -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; перекл($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 / сопостав ./sapi/cli/php -r 'echo match(2){1=>"A",2=>"B"};' ./sapi/cli/php -r 'эхо сопостав(2){1=>"A",2=>"B"};' ``` -### Константы и переходы +### Итоговый комбинированный тест ```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 'функц сумма($a,$b){возврат $a+$b;} эхо сумма(5,3);' ``` @@ -371,7 +212,7 @@ blog to the most popular websites in the world. |------|-----------| | `Zend/zend_language_scanner.l` | Русские ключевые слова | | `Zend/zend_constants.c` | `правда`/`ложь`/`пусто` | -| `Zend/zend_constants.h` | UTF-8 длины (8,10,12) | +| `Zend/zend_constants.h` | UTF-8 длины (8, 10, 12) | --- @@ -390,26 +231,25 @@ make -j$(nproc) ## 📊 Результат тестирования -| Категория | Тестов (оригинал+русский) | Статус | -|-----------|--------------------------|--------| +| Категория | Тестов | Статус | +|-----------|--------|--------| | Условные операторы | 8 | ✅ | -| Циклы | 14 | ✅ | -| Foreach | 4 | ✅ | -| Функции | 40 | ✅ | -| Вывод | 6 | ✅ | +| Циклы | 10 | ✅ | +| Foreach | 2 | ✅ | +| Функции | 20 | ✅ | +| Вывод | 4 | ✅ | | Логические константы | 6 | ✅ | -| Классы и ООП | 16 | ✅ | -| Исключения | 8 | ✅ | -| Switch/Match | 8 | ✅ | -| Прочие | 8 | ✅ | -| **ИТОГО** | **118** | **✅ 100%** | +| Классы и ООП | 10 | ✅ | +| Исключения | 6 | ✅ | +| Switch/Match | 4 | ✅ | +| Прочие | 4 | ✅ | +| **ИТОГО** | **74** | **✅ 100%** | --- ## 📝 Лицензия -PHP is distributed under the [Modified BSD License](LICENSE) -(SPDX-License-Identifier: `BSD-3-Clause`). +PHP is distributed under the [Modified BSD License](LICENSE) (SPDX-License-Identifier: `BSD-3-Clause`). **© 2026 - Русский форк PHP** 🇷🇺 ``` \ No newline at end of file