Lascia che ti illustri usando il linguaggio PHP. La discussione qui è, come dovrei fare esattamente per risolvere questo problema in modo chiaro e non ambiguo.
Immagina di avere una classe chiamata Path
. Questa classe è responsabile della definizione di un oggetto che fa riferimento a un percorso di un file, ad esempio. Questa classe mi aiuta con alcune attività, ad esempio:
$pathInstance = new Path("path/to/file.bin");
$pathInstance->exists(); // Return if file exists.
$pathInstance->get_dirname(); // Return the dirname of file.
$pathInstance->get_basename(); // Return the basename of file.
$pathInstance->is_file(); // So on...
Tuttavia, c'è un problema in questa metodologia quando ho bisogno, allo stesso tempo, di utilizzare un metodo statico che consente di eseguire un'attività senza creare un'istanza. Ad esempio:
Quando chiamo is_file()
controlleremo se il percorso interno se $this
è riferito a un file. Ma voglio farlo anche in modo statico, ad esempio Path::is_file("path/to/file.bin")
.
In PHP, questo non è raccomandato ed è necessario per eseguire una soluzione di base. E personalmente penso che non sia il concetto giusto da applicare.
Immagina di averlo:
class Path {
/** @var string */
private $path;
/** @param string $path */
function __construct($path) {
$this->path = $path;
}
/**
* Normalize the path.
* @param boolean $force_normalize Force even if path doesn't exists.
* @return string|false
*/
public function normalize($force_normalize = null) {
if($force_normalize === true) { /* ... */ }
return realpath($this->path);
}
}
Così uso come:
$pathInstance = new Path("/abc/../def");
echo $pathInstance->normalize(); // output "/def"
Ma mi piacerebbe lavorare TRO staticamente, ad esempio:
echo Path::normalize("/abc/../def"); // output "/def"