Koda
, (*1)
Koda allows to analyse code entries, call functions, methods and objects with validation of arguments and type casting.
This is similar to call_user_func and call_user_func_array, but more smarter.
For example calculate hypotenuse using method:, (*2)
class Math {
/**
* @param float $leg1 (unsigned) first cathetus of triangle
* @param float $leg2 (unsigned) second cathetus of triangle
* @return float
*/
public static function hypotenuse($leg1, $leg2, $round = 2) {
// ...
}
}
all arguments we gets from associative (or plain) array (e.g. $_GET
)., (*3)
If use classic way with call_user_func
:, (*4)
if(isset($_GET['leg1'])) {
$leg1 = floatval($_GET['leg1']);
if($leg1 < 0) {
throw new LogicException("leg1 should be greater than 0");
}
} else {
throw new RuntimeException("No leg1 parameter");
}
if(isset($_GET['leg2'])) {
$leg2 = floatval($_GET['leg2']);
if($leg2 < 0) {
throw new LogicException("leg2 should be greater than 0");
}
} else {
throw new RuntimeException("No leg2 parameter");
}
return call_user_func('Math::hypotenuse', $leg1, $leg2);
But if use Koda
we get one line of code:, (*5)
return Koda::call('Math::hypotenuse', $_GET);
Koda find all arguments from associative (or plain) array $_GET
, change type, validate and invoke method., (*6)
Method call
/**
* Method description
* @param int $arg1 some integer value
* @param string $arg2 some string value
* @param float[] $arg3 array of floating point values
* @return bool method result
**/
public function doSomething($arg1, $arg2, array $arg3 = array()) {
// ...
}
ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π²ΡΠ΅Ρ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² Π·Π°ΠΏΡΠΎΡΠ΅ ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π½ΡΠΆΠ½ΠΎΠΌΡ ΡΠΈΠΏΡ, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΡΠ²Π°Π΅Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ²ΠΈΠ½ΡΠΈΠ²Π½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°ΠΌΠΈΡ
Π΄Π°Π½Π½ΡΡ
.
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΅ΡΡΡ Π½Π°Π±ΠΎΡ Π³ΠΎΡΠΎΠ²ΡΡ
ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ. ΠΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ Π² doc-Π±Π»ΠΎΠΊΠ΅ Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ
, ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π½Π°Π·Π²Π°Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:, (*7)
/**
* Method description
* @param int $arg1 (value 0..100) Π½Π΅ΠΊΠΈΠΉ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ 0 ΠΈ 100 Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ
* @param string $arg2 (keyword, length < 100) Π½Π΅ΠΊΠΈΠΉ ΡΡΠΎΠΊΠΎΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π΄Π»ΠΈΠ½Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ 100 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· `a-z0-9-_`
* @param float[] $arg3 (count 0..10) ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ, ΠΌΠ°ΡΡΠΈΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΡ 0 Π΄ΠΎ 10 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
**/
public function doSomethingAction($arg1, $arg2, array $arg3) {
// ...
}
List of verifications (class Koda\Filter
):, (*8)
-
unsigned
- value is unsigned integer
-
positive
- integer value greater than zero
-
negative
- integer value less than zero
-
smalltext
- string value less than or equal to 256 bytes
-
text
- string value less than or equal to 64KiB.
-
largetext
- string value less than or equal to 2MiB.
-
date [FORMAT]
- string value is a date. FORMAT
- the format that the passed in string should be in. FORMAT
- optional parameter, by default function strtotime parse string.
-
length RANGE
- specifies the maximum number of bytes allowed in the string value. Maybe range length 1..6
, equality length = 6
or inequality length <=100
.
-
value RANGE
- ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ½ΡΠ΅ΡΠ²Π°Π» Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ 1..6
ΡΠ°ΠΊ ΠΈ Π½Π΅ ΡΠ°Π²Π΅ΡΡΠ²ΠΎΠΌ <=100
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, value <100
, value 6..20
-
count RANGE
- ΠΌΠ°ΡΡΠΈΠ² Π·Π°Π½ΡΠ΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΠΎΡΠΎΠ². ΠΠ½ΡΠ΅ΡΠ²Π°Π» Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ 1..6
ΡΠ°ΠΊ ΠΈ Π½Π΅ ΡΠ°Π²Π΅ΡΡΠ²ΠΎΠΌ <=100
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, count <100
, count 6..20
-
file
- checks that the given string is existing regular file.
-
dir
- checks that the given string is existing directory.
-
email [extended]
- string value is email address. Set parameter extended
that would allow the email format James Bond <agent007@dev.null>
.
-
domain
- checks that the given string is domain.
-
custom CALLBACK
- Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π² ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
-
url
- string value is URL
-
ip
- string value is IP address
-
hex
- hex string, like md5 or sha1.
-
like PATTERN
- match string value against a glob pattern. Example: like *.tgz
-
mask PATTERN
- ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΠΌΠ°ΡΠΊΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, mask a-z0-9_
-
regexp PATTERN
- ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, regexp /^[a-z0-9_]+$/si
-
variants SOURCE
- Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° SOURCE. SOURCE ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ±Π΅Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°ΠΊ ΠΈ ΠΊΠΎΠ»Π»Π±Π΅ΠΊΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, variants: one two three four
-
options CALLBACK
- Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠ΅ΡΡΡ Π² ΠΊΠ»ΡΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
-
is [SOMETHING]
- Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅ΡΠΊΠ° ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, ΡΠ°ΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΠΈ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true
. ΠΠ΄Π½Π°ΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π°.
ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² Koda\Filter
ΡΠΎ Π΄Π»Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ Validator
., (*9)
/**
* Method description
* @param int $author (user active)
**/
public function addPost($author) {
// ...
}
public function userValidator($user_id, $type) {
// check $user_id
}
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠ°ΠΊ ΠΆΠ΅ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΠΏ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ splFileInfo
:, (*10)
/**
* ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°
* @param splFileInfo $file ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°ΠΊΠ°ΡΠΈΠ½Ρ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ
**/
public function doSomethingAction(splFileInfo $file) {
// ...
}
Create object
Cache
RPC example