1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105:
<?php
namespace Coast\File;
use DateTime;
abstract class Path extends \Coast\Path
{
public function exists()
{
return file_exists($this->_name);
}
public function isExist()
{
return $this->exists();
}
public function isDir()
{
return is_dir($this->_name);
}
public function isFile()
{
return is_file($this->_name);
}
public function isReadable()
{
return is_readable($this->_name);
}
public function isWritable()
{
return is_writable($this->_name);
}
public function permissions()
{
return substr(sprintf('%o', fileperms($this->_name)), -4);
}
public function move(\Coast\Dir $dir, $baseName = null)
{
$name = "{$dir}/" . (isset($baseName)
? $this->_parseBaseName($baseName)
: $this->baseName());
rename($this->_name, $name);
$this->_name = $name;
return $this;
}
public function rename($baseName, \Coast\Dir $dir = null)
{
$name = (isset($dir)
? $dir
: $this->dir()) . "/{$this->_parseBaseName($baseName)}";
rename($this->_name, $name);
$this->_name = $name;
return $this;
}
abstract public function copy(\Coast\Dir $dir, $baseName = null);
abstract public function remove();
public function accessTime()
{
return (new DateTime())->setTimestamp(fileatime($this->_name));
}
public function changeTime()
{
return (new DateTime())->setTimestamp(filectime($this->_name));
}
public function modifyTime()
{
return (new DateTime())->setTimestamp(filemtime($this->_name));
}
protected function _parseBaseName($baseName)
{
if (is_array($baseName)) {
$baseName = array_intersect_key($baseName, [
'baseName' => null,
'fileName' => null,
'extName' => null,
'prefix' => null,
'suffix' => null,
]);
$path = new \Coast\Path($this->baseName());
foreach ($baseName as $method => $value) {
$path->$method($value);
}
$baseName = $path->baseName();
}
return $baseName;
}
}