我已经使用try-catch多年了,但我从来没有学过如何以及何时使用finally,因为我从未明白finally(我读过坏书)的意思?
我想问你finally在我的案子中的用法.
我的代码示例应该解释一切:
$s = "";
$c = MyClassForFileHandling::getInstance();
try
{
$s = $c->get_file_content($path);
}
catch FileNotFoundExeption
{
$c->create_file($path, "text for new file");
}
finally
{
$s = $c->get_file_content($path);
}
Run Code Online (Sandbox Code Playgroud)
终于正确使用了吗?
更准确的问题:
我可以使用finally(在未来的PHP版本或其他语言中)处理"创建一些不存在的东西"操作吗?
我试图从一个闭包中引用一个对象的私有变量.下面的代码似乎有效,但它抱怨Fatal error: Cannot access self:: when no class scope is active in test.php on line 12和Fatal error: Using $this when not in object context in test.php on line 20.
任何想法如何使用闭包完成相同的结果,同时保持变量私有和没有帮助函数(击败私有变量的整个想法).
class MyClass
{
static private $_var1;
private $_var2;
static function setVar1( $value )
{
$closure = function () use ( $value ) {
self::$_var1 = $value;
};
$closure();
}
function setVar2( $value )
{
$closure = function () use ( $value ) {
$this->_var2 = $value; …Run Code Online (Sandbox Code Playgroud) 我试图通过匿名函数转储对象的私有属性的元素 - 当然我可以通过许多其他方式实现这一点,但这突出了一个PHP难题,我无法解决我的头脑,缺乏$ foo = $ this和使用$ foo - 但这不会给我私人的东西,所以...建议?
示例代码:
class MyClass
{
private $payload = Array( 'a' => 'A element', 'b' => 'B element');
static $csvOrder = Array('b','a');
public function toCSV(){
$values = array_map(
function($name) use ($this) { return $this->payload[$name]; },
self::$csvOrder
);
return implode(',',$values);
}
}
$mc = new MyClass();
print $mc->toCSV();
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习PHP,我刚刚转到Exceptions,当我尝试一个例子时
http://php.net/manual/en/language.exceptions.php
Example #2 Exception handling with a finally block
我得到一个错误
Parse error: syntax error, unexpected '{' in C:\xampp\htdocs\test\filename.php on line 13
<?php
function inverse($x) {
if (!$x) {
throw new Exception('Division by zero.');
}
else return 1/$x;
}
try {
echo inverse(5) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} finally {
echo "First finally.\n";
}
try {
echo inverse(0) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n"; …Run Code Online (Sandbox Code Playgroud)