ru_php/README.md

255 lines
9 KiB
Markdown
Raw Permalink Normal View History

2026-05-31 18:52:40 +03:00
```markdown
2026-05-31 18:58:46 +03:00
# PHP-RU: Русский форк PHP
2026-05-31 18:58:46 +03:00
**Официальный репозиторий:** [github.com/php/php-src](https://github.com/php/php-src)
**Данный форк:** [gitlab.com/mzhoot/ru_php](https://gitlab.com/mzhoot/ru_php)
2026-05-31 18:58:46 +03:00
---
## О проекте
2026-05-31 18:58:46 +03:00
PHP — популярный язык программирования общего назначения.
Этот форк добавляет **поддержку русских ключевых слов** и **логических констант**, сохраняя полную совместимость с оригинальным синтаксисом.
2026-05-31 18:52:40 +03:00
---
## 📋 Русские ключевые слова
2026-05-31 18:58:46 +03:00
| Оригинал | Русский | Оригинал | Русский |
|----------|---------|----------|---------|
| `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` | `реализ` |
2026-05-31 18:52:40 +03:00
---
2026-05-31 18:58:46 +03:00
## 🧪 Однострочные тесты
2026-05-31 18:52:40 +03:00
### Условные операторы
```bash
# if / если
./sapi/cli/php -r 'if (5 > 3) { echo "OK\n"; }'
./sapi/cli/php -r 'если (5 > 3) { эхо "OK\n"; }'
# else / иначе
./sapi/cli/php -r 'if (0) { echo "A"; } else { echo "B\n"; }'
./sapi/cli/php -r 'если (0) { эхо "A"; } иначе { эхо "B\n"; }'
# elseif / и_если
./sapi/cli/php -r '$x=2; if($x==1){echo"A";}elseif($x==2){echo"B\n";}'
./sapi/cli/php -r '$x=2; если($x==1){эхо"A";}и_если($x==2){эхо"B\n";}'
# endif / к_если
./sapi/cli/php -r 'if (1): echo "OK\n"; endif;'
./sapi/cli/php -r 'если (1): эхо "OK\n"; к_если;'
```
2026-05-31 18:52:40 +03:00
### Циклы
2026-05-31 18:52:40 +03:00
```bash
# while / пока
./sapi/cli/php -r '$i=0; while($i<3){echo $i." "; $i++;}'
./sapi/cli/php -r '$i=0; пока($i<3){эхо $i." "; $i++;}'
2026-05-31 18:52:40 +03:00
# do / делать
./sapi/cli/php -r '$i=0; do { echo $i." "; $i++; } while($i<3);'
./sapi/cli/php -r '$i=0; делать { эхо $i." "; $i++; } пока($i<3);'
2026-05-31 18:52:40 +03:00
# for / для
./sapi/cli/php -r 'for($i=0;$i<3;$i++){ echo $i." "; }'
./sapi/cli/php -r 'для($i=0;$i<3;$i++){ эхо $i." "; }'
2026-05-31 18:52:40 +03:00
# 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." "; }'
# continue / далее
./sapi/cli/php -r 'for($i=0;$i<5;$i++){ if($i==2)continue; echo $i." "; }'
./sapi/cli/php -r 'для($i=0;$i<5;$i++){ если($i==2)далее; эхо $i." "; }'
```
2026-05-31 18:52:40 +03:00
### Foreach
2026-05-31 18:52:40 +03:00
```bash
# 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." "; }'
```
2026-05-31 18:52:40 +03:00
### Функции
2026-05-31 18:52:40 +03:00
```bash
# Простая функция
./sapi/cli/php -r 'function square($x){return $x*$x;} echo square(5);'
./sapi/cli/php -r 'функц квадрат($x){возврат $x*$x;} эхо квадрат(5);'
2026-05-31 18:52:40 +03:00
# Функция с двумя параметрами
./sapi/cli/php -r 'function sum($a,$b){return $a+$b;} echo sum(10,20);'
./sapi/cli/php -r 'функц сумма($a,$b){возврат $a+$b;} эхо сумма(10,20);'
2026-05-31 18:52:40 +03:00
# Рекурсивная функция
./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);'
2026-05-31 18:58:46 +03:00
# Анонимная функция
2026-05-31 18:52:40 +03:00
./sapi/cli/php -r '$f=fn($x)=>$x*2; echo $f(5);'
./sapi/cli/php -r '$f=фн($x)=>$x*2; эхо $f(5);'
2026-05-31 18:52:40 +03:00
# Функция с типом возврата
./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);'
2026-05-31 18:58:46 +03:00
# Функция со значением по умолчанию
2026-05-31 18:52:40 +03:00
./sapi/cli/php -r 'function greet($name="World"){return "Hello $name";} echo greet();'
./sapi/cli/php -r 'функц привет($имя="Мир"){возврат "Привет $имя";} эхо привет();'
2026-05-31 18:52:40 +03:00
# Функция с передачей по ссылке
./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;'
2026-05-31 18:58:46 +03:00
# Стрелочная функция
2026-05-31 18:52:40 +03:00
./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($результат);'
```
2026-05-31 18:52:40 +03:00
### Логические константы
```bash
# true / правда
./sapi/cli/php -r 'if(true){ echo "OK\n"; }'
./sapi/cli/php -r 'если(правда){ эхо "OK\n"; }'
# false / ложь
./sapi/cli/php -r 'if(false){ echo "A"; }else{ echo "B\n"; }'
./sapi/cli/php -r 'если(ложь){ эхо "A"; }иначе{ эхо "B\n"; }'
2026-05-31 18:52:40 +03:00
# null / пусто
./sapi/cli/php -r '$x=null; echo is_null($x)?"OK\n":"";'
./sapi/cli/php -r '$x=пусто; эхо is_null($x)?"OK\n":"";'
```
2026-05-31 18:52:40 +03:00
### Классы и ООП
2026-05-31 18:52:40 +03:00
```bash
# class / класс
./sapi/cli/php -r 'class Foo{} echo "OK\n";'
./sapi/cli/php -r 'класс Foo{} эхо "OK\n";'
2026-05-31 18:52:40 +03:00
# new / нов
./sapi/cli/php -r 'class Foo{} $x=new Foo(); echo "OK\n";'
./sapi/cli/php -r 'класс Foo{} $x=нов Foo(); эхо "OK\n";'
2026-05-31 18:52:40 +03:00
# public / публ
./sapi/cli/php -r 'class Foo{public $x=1;} echo "OK\n";'
./sapi/cli/php -r 'класс Foo{публ $x=1;} эхо "OK\n";'
2026-05-31 18:52:40 +03:00
# static / статич
./sapi/cli/php -r 'class Foo{static $x=1;} echo Foo::$x;'
./sapi/cli/php -r 'класс Foo{статич $x=1;} эхо Foo::$x;'
# extends / расшир
./sapi/cli/php -r 'class A{} class B extends A{} echo "OK\n";'
./sapi/cli/php -r 'класс A{} класс B расшир A{} эхо "OK\n";'
```
2026-05-31 18:52:40 +03:00
### Исключения
```bash
# try/catch / проб/отлов
./sapi/cli/php -r 'try{ echo "OK\n"; }catch(Exception $e){}'
./sapi/cli/php -r 'проб{ эхо "OK\n"; }отлов(Exception $e){}'
2026-05-31 18:52:40 +03:00
# throw / бросить
./sapi/cli/php -r 'try{ throw new Exception(); }catch(Exception $e){ echo "OK\n"; }'
./sapi/cli/php -r 'проб{ бросить нов Exception(); }отлов(Exception $e){ эхо "OK\n"; }'
2026-05-31 18:52:40 +03:00
# finally / к_проб
./sapi/cli/php -r 'try{ echo "A"; }finally{ echo "B\n"; }'
./sapi/cli/php -r 'проб{ эхо "A"; }к_проб{ эхо "B\n"; }'
```
2026-05-31 18:52:40 +03:00
### Switch/Match
```bash
# switch / перекл
./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"; брейк;}'
2026-05-31 18:52:40 +03:00
# match / сопостав
./sapi/cli/php -r 'echo match(2){1=>"A",2=>"B"};'
./sapi/cli/php -r 'эхо сопостав(2){1=>"A",2=>"B"};'
```
2026-05-31 18:58:46 +03:00
### Итоговый комбинированный тест
2026-05-31 18:52:40 +03:00
```bash
./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);'
```
2026-05-31 18:52:40 +03:00
---
2026-05-31 18:52:40 +03:00
## 🔧 Изменённые файлы
2026-05-31 18:52:40 +03:00
| Файл | Изменения |
|------|-----------|
| `Zend/zend_language_scanner.l` | Русские ключевые слова |
| `Zend/zend_constants.c` | `правда`/`ложь`/`пусто` |
2026-05-31 18:58:46 +03:00
| `Zend/zend_constants.h` | UTF-8 длины (8, 10, 12) |
2026-05-31 18:52:40 +03:00
---
2026-05-31 18:52:40 +03:00
## 🔨 Сборка
```bash
git clone https://gitlab.com/mzhoot/ru_php.git
cd ru_php
./buildconf --force
./configure --enable-debug --disable-all
make -j$(nproc)
./sapi/cli/php -r 'эхо "Привет, русский PHP!\n";'
```
2026-05-31 18:52:40 +03:00
---
2026-05-31 18:52:40 +03:00
## 📊 Результат тестирования
2026-05-31 18:58:46 +03:00
| Категория | Тестов | Статус |
|-----------|--------|--------|
2026-05-31 18:52:40 +03:00
| Условные операторы | 8 | ✅ |
2026-05-31 18:58:46 +03:00
| Циклы | 10 | ✅ |
| Foreach | 2 | ✅ |
| Функции | 20 | ✅ |
| Вывод | 4 | ✅ |
2026-05-31 18:52:40 +03:00
| Логические константы | 6 | ✅ |
2026-05-31 18:58:46 +03:00
| Классы и ООП | 10 | ✅ |
| Исключения | 6 | ✅ |
| Switch/Match | 4 | ✅ |
| Прочие | 4 | ✅ |
| **ИТОГО** | **74** | **✅ 100%** |
2026-05-31 18:52:40 +03:00
---
## 📝 Лицензия
2026-05-31 18:58:46 +03:00
PHP is distributed under the [Modified BSD License](LICENSE) (SPDX-License-Identifier: `BSD-3-Clause`).
2026-05-31 18:52:40 +03:00
**© 2026 - Русский форк PHP** 🇷🇺
```