MD_STD/MD_STD.php

119 lines
3.1 KiB
PHP
Raw Normal View History

2020-07-26 14:52:41 +02:00
<?PHP
/**
* Provides type-safe overrides of default PHP functions.
*/
declare(strict_types = 1);
/**
* Standard class providing overrides of default PHP functions as static
* functions.
*/
class MD_STD {
/**
* Wrapper around file_get_contents, that provides catches errors on it and returns
* with type safety.
*
* @param string $filename Filepath of the file to read.
*
* @return string
*/
public static function file_get_contents(string $filename):string {
if (substr($filename, 0, 4) !== 'http' && !file_exists($filename)) {
throw new MDFileDoesNotExist("There is no file {$filename}");
}
$contents = file_get_contents($filename);
if (is_bool($contents)) {
throw new MDFileIsNotReadable("File {$filename} is not readable");
}
return $contents;
}
2020-08-05 14:01:26 +02:00
/**
* Returns the real path of a relative file path. Throws an error rather than
* returning the default false.
*
* @param string $path File path to convert.
*
* @return string
*/
public static function realpath(string $path):string {
$output = realpath($path);
if (!is_string($output)) throw new MDFileDoesNotExist("The file {$path} does not exist or is not readable.");
return $output;
}
2020-07-26 14:52:41 +02:00
/**
* Gets contents of a folder.
*
* @param string $filepath Directory path.
*
* @return array<string>
*/
public static function scandir(string $filepath):array {
if (!is_dir($filepath) || ($output = scandir($filepath)) === false) {
2020-07-26 15:13:03 +02:00
throw new MDFileDoesNotExist("There is no file {$filepath}");
2020-07-26 14:52:41 +02:00
}
return array_values(array_diff($output, ['.', '..']));
}
2020-08-05 15:31:29 +02:00
/**
* Type safe wrapper around ob_get_clean(): Gets the current buffer
* contents and delete current output buffer.
*
* @return string
*/
public static function ob_get_clean():string {
$output = ob_get_clean();
if ($output === false) throw new MDOutputBufferNotStarted("Output buffer was not started");
return $output;
}
/**
* Function checking if a string starts with another.
*
* @param string $haystack String to check.
* @param string $needle Potential start of $haystack.
*
* @return boolean
*/
public static function startsWith(string $haystack, string $needle):bool {
if (substr($haystack, 0, strlen($needle)) == $needle) return true;
else return false;
}
/**
* Function checking if a string starts with any input from the input array.
*
* @param string $haystack String to check.
* @param string[] $needles Array containing potential start values of $haystack.
*
* @return boolean
*/
public static function startsWithAny(string $haystack, array $needles):bool {
$output = false;
foreach ($needles as $needle) {
$output = self::startsWith($haystack, $needle);
if ($output == true) return $output;
}
return $output;
}
2020-07-26 14:52:41 +02:00
}