2023-04-02 18:07:52 +03:00
|
|
|
<?php
|
|
|
|
include_once "Reflection.php";
|
|
|
|
function isRegex($string)
|
|
|
|
{
|
|
|
|
$mathes = [];
|
|
|
|
$execute = preg_match(
|
|
|
|
"/^\/.*\/[imsxADSUXJu]+$/",
|
|
|
|
$string,
|
|
|
|
$mathes
|
|
|
|
);
|
|
|
|
return $execute;
|
|
|
|
}
|
|
|
|
class tstring
|
|
|
|
{
|
|
|
|
use ReflectionHook;
|
|
|
|
protected $data = "";
|
|
|
|
static function isstring($data)
|
|
|
|
{
|
|
|
|
if(gettype($data) == "string")
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
if(gettype($data) == "object")
|
|
|
|
{
|
|
|
|
return method_exists($data, "__toString");
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2023-04-07 01:02:39 +03:00
|
|
|
static function from($data)
|
|
|
|
{
|
|
|
|
return new tstring($data);
|
|
|
|
}
|
2023-04-02 18:07:52 +03:00
|
|
|
public function __construct($data = "")
|
|
|
|
{
|
|
|
|
$this->data = $data;
|
|
|
|
}
|
|
|
|
public function getLengthAttribute()
|
|
|
|
{
|
|
|
|
return strlen($this->data);
|
|
|
|
}
|
|
|
|
public function at($index) : string
|
|
|
|
{
|
|
|
|
return $this->data[$index] ?? "";
|
|
|
|
}
|
|
|
|
public function charAt($index) : string
|
|
|
|
{
|
|
|
|
return $this->at($index);
|
|
|
|
}
|
|
|
|
public function concat(...$string) : tstring
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
implode('',[
|
|
|
|
$this->data,
|
|
|
|
...$string
|
|
|
|
])
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function endsWith($string) : bool
|
|
|
|
{
|
|
|
|
if(PHP_MAJOR_VERSION >= 8)
|
|
|
|
{
|
|
|
|
return str_ends_with($this->data, $string);
|
|
|
|
};
|
|
|
|
$size = strlen($string);
|
|
|
|
if(substr($this->data, -$size) == $string)
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}else{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public function startsWith($string) : bool
|
|
|
|
{
|
|
|
|
if(PHP_MAJOR_VERSION >= 8)
|
|
|
|
{
|
|
|
|
return str_starts_with($this->data, $string);
|
|
|
|
};
|
|
|
|
$size = strlen($string);
|
|
|
|
if(substr($this->data, 0, $size) == $string)
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}else{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2023-04-07 01:02:39 +03:00
|
|
|
public function match($pattern) : array|bool
|
2023-04-02 18:07:52 +03:00
|
|
|
{
|
|
|
|
$mathes = [];
|
2023-04-07 01:02:39 +03:00
|
|
|
$matched = preg_match(
|
2023-04-02 18:07:52 +03:00
|
|
|
$pattern,
|
|
|
|
$this->data,
|
|
|
|
$mathes
|
|
|
|
);
|
2023-04-07 01:02:39 +03:00
|
|
|
return $matched ? $mathes : false;
|
2023-04-02 18:07:52 +03:00
|
|
|
}
|
|
|
|
public function matchAll($pattern) : array
|
|
|
|
{
|
|
|
|
$mathes = [];
|
|
|
|
preg_match_all(
|
|
|
|
$pattern,
|
|
|
|
$this->data,
|
|
|
|
$mathes
|
|
|
|
);
|
|
|
|
return $mathes;
|
|
|
|
}
|
|
|
|
public function padStart($length, $padString = " ")
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
str_pad(
|
|
|
|
$this->data,
|
|
|
|
$length,
|
|
|
|
$padString,
|
|
|
|
STR_PAD_RIGHT
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function padEnd($length, $padString = " ")
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
str_pad(
|
|
|
|
$this->data,
|
|
|
|
$length,
|
|
|
|
$padString,
|
|
|
|
STR_PAD_LEFT
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function repeat($count)
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
str_repeat(
|
|
|
|
$this->data,
|
|
|
|
$count
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function replace($pattern, $subject = "")
|
|
|
|
{
|
|
|
|
if(gettype($pattern) == "array")
|
|
|
|
{
|
|
|
|
$a = [];
|
|
|
|
$b = [];
|
|
|
|
foreach ($pattern as $key => $value) {
|
|
|
|
$a[] = $key;
|
|
|
|
$b[] = $value ?? "";
|
|
|
|
};
|
|
|
|
return new tstring(
|
|
|
|
str_replace($a, $b, $this->data)
|
|
|
|
);
|
|
|
|
}else if(gettype($pattern) == "string" && isRegex($pattern))
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
preg_replace(
|
|
|
|
$pattern,
|
|
|
|
$subject,
|
|
|
|
$this->data
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}else{
|
|
|
|
return new tstring(
|
|
|
|
str_replace(
|
|
|
|
$pattern,
|
|
|
|
$subject,
|
|
|
|
$this->data
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public function ireplace($pattern, $subject = "")
|
|
|
|
{
|
|
|
|
if(gettype($pattern) == "array")
|
|
|
|
{
|
|
|
|
$a = [];
|
|
|
|
$b = [];
|
|
|
|
foreach ($pattern as $key => $value) {
|
|
|
|
$a[] = $key;
|
|
|
|
$b[] = $value ?? "";
|
|
|
|
};
|
|
|
|
return new tstring(
|
|
|
|
str_ireplace($a, $b, $this->data)
|
|
|
|
);
|
|
|
|
}else if(gettype($pattern) == "string" && isRegex($pattern))
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
preg_replace(
|
|
|
|
$pattern,
|
|
|
|
$subject,
|
|
|
|
$this->data
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}else{
|
|
|
|
return new tstring(
|
|
|
|
str_ireplace(
|
|
|
|
$pattern,
|
|
|
|
$subject,
|
|
|
|
$this->data
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public function search($string)
|
|
|
|
{
|
|
|
|
return strpos($this->data, $string);
|
|
|
|
}
|
|
|
|
public function isearch($string)
|
|
|
|
{
|
|
|
|
return stripos($this->data, $string);
|
|
|
|
}
|
|
|
|
public function slice($start = 0, $end = null)
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
substr(
|
|
|
|
$this->data,
|
|
|
|
$start,
|
|
|
|
$end
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function split($delimiter)
|
|
|
|
{
|
|
|
|
return array_map(
|
|
|
|
function($e){
|
|
|
|
return new tstring($e);
|
|
|
|
},
|
|
|
|
explode($delimiter, $this->data)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function splitjoin($delimiter, $glue)
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
implode(
|
|
|
|
$glue,
|
|
|
|
explode($delimiter, $this->data)
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function wrap($delimiter, $glue, $callback)
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
implode(
|
|
|
|
$glue,
|
|
|
|
array_map(
|
|
|
|
function($item) use($callback)
|
|
|
|
{
|
|
|
|
return $callback(new tstring($item));
|
|
|
|
},
|
|
|
|
explode($delimiter, $this->data)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function toLowerCase()
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
strtolower($this->data)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function toUpperCase()
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
strtoupper($this->data)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function trim()
|
|
|
|
{
|
|
|
|
return new tstring(
|
|
|
|
trim($this->data)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
public function __toString()
|
|
|
|
{
|
|
|
|
return $this->data;
|
|
|
|
}
|
2023-04-07 01:02:39 +03:00
|
|
|
public function raw()
|
|
|
|
{
|
|
|
|
return $this->data;
|
|
|
|
}
|
2023-04-02 18:07:52 +03:00
|
|
|
}
|
|
|
|
function dd($data){
|
|
|
|
highlight_string("<?=\n\n" . var_export($data, true) . "\n\n?>");
|
|
|
|
die();
|
|
|
|
}
|