Skip to content

Commit 675be35

Browse files
committed
feat: Add new examples for array callable syntax and performance improvements in v1.1.3
- Introduced `array-callables.php` demonstrating array callable syntax with instance and static methods. - Added `performance-v1.1.3.php` showcasing significant performance enhancements, including object pooling and JSON optimization. - Updated `README.md` to include new examples and detailed instructions for running and testing the features.
1 parent 93135ae commit 675be35

20 files changed

+7218
-0
lines changed

examples/.gitignore

Whitespace-only changes.

examples/01-basics/basic-routes.php

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
<?php
2+
3+
/**
4+
* 🛣️ PivotPHP - Rotas Básicas
5+
*
6+
* Demonstra todos os métodos HTTP básicos no estilo Express.js
7+
*
8+
* 🚀 Como executar:
9+
* php -S localhost:8000 examples/01-basics/basic-routes.php
10+
*
11+
* 🧪 Como testar:
12+
* curl http://localhost:8000/
13+
* curl -X POST http://localhost:8000/users -H "Content-Type: application/json" -d '{"name":"John"}'
14+
* curl -X PUT http://localhost:8000/users/1 -H "Content-Type: application/json" -d '{"name":"Jane"}'
15+
* curl -X DELETE http://localhost:8000/users/1
16+
*/
17+
18+
require_once dirname(__DIR__, 2) . '/pivotphp-core/vendor/autoload.php';
19+
20+
use PivotPHP\Core\Core\Application;
21+
22+
$app = new Application();
23+
24+
// Simulação de banco de dados em memória
25+
$users = [
26+
1 => ['id' => 1, 'name' => 'Alice', 'email' => '[email protected]'],
27+
2 => ['id' => 2, 'name' => 'Bob', 'email' => '[email protected]'],
28+
];
29+
$nextId = 3;
30+
31+
// 📋 GET - Listar todos os usuários
32+
$app->get('/', function ($req, $res) use (&$users) {
33+
return $res->json([
34+
'users' => array_values($users),
35+
'total' => count($users),
36+
'endpoints' => [
37+
'GET /' => 'Listar usuários',
38+
'GET /users/:id' => 'Obter usuário específico',
39+
'POST /users' => 'Criar usuário',
40+
'PUT /users/:id' => 'Atualizar usuário',
41+
'DELETE /users/:id' => 'Deletar usuário'
42+
]
43+
]);
44+
});
45+
46+
// 👤 GET - Obter usuário específico
47+
$app->get('/users/:id', function ($req, $res) use (&$users) {
48+
$id = (int) $req->param('id');
49+
50+
if (!isset($users[$id])) {
51+
return $res->status(404)->json(['error' => 'Usuário não encontrado']);
52+
}
53+
54+
return $res->json(['user' => $users[$id]]);
55+
});
56+
57+
// ➕ POST - Criar novo usuário
58+
$app->post('/users', function ($req, $res) use (&$users, &$nextId) {
59+
$body = $req->getBodyAsStdClass();
60+
61+
// Validação básica
62+
if (empty($body->name)) {
63+
return $res->status(400)->json(['error' => 'Nome é obrigatório']);
64+
}
65+
66+
$user = [
67+
'id' => $nextId++,
68+
'name' => $body->name,
69+
'email' => $body->email ?? null,
70+
'created_at' => date('Y-m-d H:i:s')
71+
];
72+
73+
$users[$user['id']] = $user;
74+
75+
return $res->status(201)->json([
76+
'message' => 'Usuário criado com sucesso',
77+
'user' => $user
78+
]);
79+
});
80+
81+
// ✏️ PUT - Atualizar usuário
82+
$app->put('/users/:id', function ($req, $res) use (&$users) {
83+
$id = (int) $req->param('id');
84+
85+
if (!isset($users[$id])) {
86+
return $res->status(404)->json(['error' => 'Usuário não encontrado']);
87+
}
88+
89+
$body = $req->getBodyAsStdClass();
90+
91+
// Atualizar campos fornecidos
92+
if (isset($body->name)) {
93+
$users[$id]['name'] = $body->name;
94+
}
95+
if (isset($body->email)) {
96+
$users[$id]['email'] = $body->email;
97+
}
98+
99+
$users[$id]['updated_at'] = date('Y-m-d H:i:s');
100+
101+
return $res->json([
102+
'message' => 'Usuário atualizado com sucesso',
103+
'user' => $users[$id]
104+
]);
105+
});
106+
107+
// 🗑️ DELETE - Deletar usuário
108+
$app->delete('/users/:id', function ($req, $res) use (&$users) {
109+
$id = (int) $req->param('id');
110+
111+
if (!isset($users[$id])) {
112+
return $res->status(404)->json(['error' => 'Usuário não encontrado']);
113+
}
114+
115+
$deletedUser = $users[$id];
116+
unset($users[$id]);
117+
118+
return $res->json([
119+
'message' => 'Usuário deletado com sucesso',
120+
'deleted_user' => $deletedUser
121+
]);
122+
});
123+
124+
// 🔍 GET - Buscar usuários
125+
$app->get('/search', function ($req, $res) use (&$users) {
126+
$query = $req->get('q', '');
127+
128+
if (empty($query)) {
129+
return $res->status(400)->json(['error' => 'Parâmetro q é obrigatório']);
130+
}
131+
132+
$results = array_filter($users, function ($user) use ($query) {
133+
return stripos($user['name'], $query) !== false ||
134+
stripos($user['email'] ?? '', $query) !== false;
135+
});
136+
137+
return $res->json([
138+
'query' => $query,
139+
'results' => array_values($results),
140+
'count' => count($results)
141+
]);
142+
});
143+
144+
$app->run();

examples/01-basics/hello-world.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
/**
4+
* 🌍 PivotPHP - Hello World
5+
*
6+
* O exemplo mais simples possível do PivotPHP Core.
7+
* Demonstra a simplicidade Express.js para PHP.
8+
*
9+
* 🚀 Como executar:
10+
* php -S localhost:8000 examples/01-basics/hello-world.php
11+
*
12+
* 🧪 Como testar:
13+
* curl http://localhost:8000/
14+
*/
15+
16+
require_once dirname(__DIR__, 2) . '/vendor/autoload.php';
17+
18+
use PivotPHP\Core\Core\Application;
19+
20+
// Criar aplicação
21+
$app = new Application();
22+
23+
// Rota simples
24+
$app->get('/', function ($req, $res) {
25+
return $res->json([
26+
'message' => 'Hello, World! 🌍',
27+
'framework' => 'PivotPHP Core',
28+
'version' => Application::VERSION,
29+
'style' => 'Express.js for PHP'
30+
]);
31+
});
32+
33+
// Rota com texto simples
34+
$app->get('/text', function ($req, $res) {
35+
return $res->send('Hello from PivotPHP! 🚀');
36+
});
37+
38+
// Rota com parâmetro
39+
$app->get('/hello/:name', function ($req, $res) {
40+
$name = $req->param('name');
41+
return $res->json([
42+
'greeting' => "Hello, {$name}! 👋",
43+
'timestamp' => date('Y-m-d H:i:s')
44+
]);
45+
});
46+
47+
// Executar aplicação
48+
$app->run();

0 commit comments

Comments
 (0)