ru_php/README.md

255 lines
9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

```markdown
# PHP-RU: Русский форк PHP
**Официальный репозиторий:** [github.com/php/php-src](https://github.com/php/php-src)
**Данный форк:** [gitlab.com/mzhoot/ru_php](https://gitlab.com/mzhoot/ru_php)
---
## О проекте
PHP — популярный язык программирования общего назначения.
Этот форк добавляет **поддержку русских ключевых слов** и **логических констант**, сохраняя полную совместимость с оригинальным синтаксисом.
---
## 📋 Русские ключевые слова
| Оригинал | Русский | Оригинал | Русский |
|----------|---------|----------|---------|
| `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` | `реализ` |
---
## 🧪 Однострочные тесты
### Условные операторы
```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"; к_если;'
```
### Циклы
```bash
# while / пока
./sapi/cli/php -r '$i=0; while($i<3){echo $i." "; $i++;}'
./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);'
# for / для
./sapi/cli/php -r 'for($i=0;$i<3;$i++){ echo $i." "; }'
./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." "; }'
# 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." "; }'
```
### Foreach
```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." "; }'
```
### Функции
```bash
# Простая функция
./sapi/cli/php -r 'function square($x){return $x*$x;} echo square(5);'
./sapi/cli/php -r 'функц квадрат($x){возврат $x*$x;} эхо квадрат(5);'
# Функция с двумя параметрами
./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);'
# Рекурсивная функция
./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 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 'функц привет($имя="Мир"){возврат "Привет $имя";} эхо привет();'
# Функция с передачей по ссылке
./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 '$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($результат);'
```
### Логические константы
```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"; }'
# null / пусто
./sapi/cli/php -r '$x=null; echo is_null($x)?"OK\n":"";'
./sapi/cli/php -r '$x=пусто; эхо is_null($x)?"OK\n":"";'
```
### Классы и ООП
```bash
# class / класс
./sapi/cli/php -r 'class Foo{} echo "OK\n";'
./sapi/cli/php -r 'класс Foo{} эхо "OK\n";'
# new / нов
./sapi/cli/php -r 'class Foo{} $x=new Foo(); echo "OK\n";'
./sapi/cli/php -r 'класс Foo{} $x=нов Foo(); эхо "OK\n";'
# public / публ
./sapi/cli/php -r 'class Foo{public $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;'
# extends / расшир
./sapi/cli/php -r 'class A{} class B extends A{} echo "OK\n";'
./sapi/cli/php -r 'класс A{} класс B расшир A{} эхо "OK\n";'
```
### Исключения
```bash
# try/catch / проб/отлов
./sapi/cli/php -r 'try{ echo "OK\n"; }catch(Exception $e){}'
./sapi/cli/php -r 'проб{ эхо "OK\n"; }отлов(Exception $e){}'
# throw / бросить
./sapi/cli/php -r 'try{ throw new Exception(); }catch(Exception $e){ echo "OK\n"; }'
./sapi/cli/php -r 'проб{ бросить нов Exception(); }отлов(Exception $e){ эхо "OK\n"; }'
# finally / к_проб
./sapi/cli/php -r 'try{ echo "A"; }finally{ echo "B\n"; }'
./sapi/cli/php -r 'проб{ эхо "A"; }к_проб{ эхо "B\n"; }'
```
### 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"; брейк;}'
# match / сопостав
./sapi/cli/php -r 'echo match(2){1=>"A",2=>"B"};'
./sapi/cli/php -r 'эхо сопостав(2){1=>"A",2=>"B"};'
```
### Итоговый комбинированный тест
```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);'
```
---
## 🔧 Изменённые файлы
| Файл | Изменения |
|------|-----------|
| `Zend/zend_language_scanner.l` | Русские ключевые слова |
| `Zend/zend_constants.c` | `правда`/`ложь`/`пусто` |
| `Zend/zend_constants.h` | UTF-8 длины (8, 10, 12) |
---
## 🔨 Сборка
```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";'
```
---
## 📊 Результат тестирования
| Категория | Тестов | Статус |
|-----------|--------|--------|
| Условные операторы | 8 | ✅ |
| Циклы | 10 | ✅ |
| Foreach | 2 | ✅ |
| Функции | 20 | ✅ |
| Вывод | 4 | ✅ |
| Логические константы | 6 | ✅ |
| Классы и ООП | 10 | ✅ |
| Исключения | 6 | ✅ |
| Switch/Match | 4 | ✅ |
| Прочие | 4 | ✅ |
| **ИТОГО** | **74** | **✅ 100%** |
---
## 📝 Лицензия
PHP is distributed under the [Modified BSD License](LICENSE) (SPDX-License-Identifier: `BSD-3-Clause`).
**© 2026 - Русский форк PHP** 🇷🇺
```