当抛出异常时,是否可以防止执行析构函数?
基本上,我的构造函数目前被设置为将一些信息保存到文件中。然而,即使当我抛出一个错误时,当我假设php将停止和停止在一起时,也会发生这种情况。
示例:
<?php
class Test {
function __construct() {
echo "constructor";
}
function __destruct() {
echo "destructor";
}
function Hello() {
echo "
我有这段代码来呈现一个模板(我是PHP新手,所以请耐心等待)
function __destruct()
{
/*
* It's render the template
*
*/
$this->_template->render();
}
出现以下错误:
Fatal error: Call to a member function render() on a non-object in /opt/lampp/htdocs/soap/php/library/control
析构函数会自动执行,而无需取消设置变量。
<?php
class cars
{
public static $count=0;
public function __construct($type, $year)
{
$this->type= $type;
$this->year= $year;
cars::$count++;
return true;
}
public function __destruct()
{
echo "The " . $this->type .
我正在尝试理解php的构造函数和析构函数的行为。对于构造函数,一切都按预期进行,但我在让析构函数隐式触发时遇到了问题。我已经在php.net和相关网站上阅读了所有的资料,但我找不到这个问题的答案。
如果我有一个简单的类,如下所示:
class test{
public function __construct(){
print "contructing<br>";
}
public function __destruct(){
print "destroying<br>
我是php的新手,所以我需要你的一些建议。这是我写的一个简单的类。
class Logger
{
private $handle;
public function readFile($filename)
{
$this->handle = fopen($filename, 'a+');
}
public function writeFile($strData)
{
fwrite($this->handle, $strData);
}
public function
我正在从0开始新的论坛项目,我想添加一个很好的方法和.首先:我试图在类中调用文件的类,我的意思是:我有一个文件class.php,main.php和index.php,在class.php中,我创建了类,在main.php中,我创建了auther类main,在使用像类一样的函数之后,我在class.php中包含了.
class.php:
<?PHP
class test{
function hello(){ echo "Hello World !"; }
}
?>
ma
我在__destruct()方法中有一些代码,有时会抛出异常。__destruct()方法在另一个异常期间被调用,我看到一个模糊的错误:
PHP Fatal error: Ignoring exception from exampleClass::__destruct() while an exception is already active
它隐藏了被调用的实际异常。我想做一些类似的事情:
public function __destruct()
{
try
{
// do work here
}
catch(Exception $e)
{
// c
我必须将使用session_set_save_handler()的php4应用程序迁移到php5。
在php4中一切正常,但是在php5中回调函数不能再访问全局变量,全局变量是在调用session_set_save_handler()之前在页面上设置的。
在下面的示例中,无法在session_writer()中访问全局变量$g1 (作为回调函数传递)
对此行为有什么解释吗?或者你能给出一些关于将会话从php4迁移到5的回调的提示吗?
这是伪代码:
function session_writer($id,$vars) {
global $g1;
echo "g1 not defi
#include <string>
#include <vector>
using namespace std;
auto f()
{
vector<string> coll{ "hello" };
//
// Must I use move(coll[0]) ?
//
return coll[0];
}
int main()
{
auto s = f();
DoSomething(s);
}
我知道:如果我只是return coll;,那么coll肯定会在返回时被移动。
但是
我正在努力学习PHP面向对象的编程,但在视频教程中,我得到了一个错误,而教程主持人没有相同的问题!
PHP代码:
<?php
class Player {
public $score = 10;
public $name = "";
public function __construct($score,$name) {
$this->score = $score;
$this->name = $name;
}
public function __destruct() {
echo "Object With Name
我正在学习PHP类和异常,从C++背景来看,我觉得下面这些都很奇怪:
当派生类的构造函数抛出异常时,基类的析构函数似乎不会自动运行:
class Base
{
public function __construct() { print("Base const.\n"); }
public function __destruct() { print("Base destr.\n"); }
}
class Der extends Base
{
public function __construct()
{
parent::__constr
物体解构的确切顺序是什么?
从测试中,我有一个想法: FIFO用于当前的范围。
class test1
{
public function __destruct()
{
echo "test1\n";
}
}
class test2
{
public function __destruct()
{
echo "test2\n";
}
}
$a = new test1();
$b = new test2();
它一次又一次地产生相同的结果:
test1
test2
是模糊的(强调强
下面的代码片段怎么可能打印出"readablenot readable“呢?afaik a die()应该立即停止所有操作吗?
编辑:发布了完整的函数。这是一个来自Zend_Search_Lucene_Storage_File_Filesystem的函数。我们总是收到“文件不可读”的错误。该文件看起来确实是可读的,但下面的代码片段打印出"readablenot readable“
编辑2:对不起,在我发布的信息中犯了一些错误;现在一切都正确了。
public function __construct($filename, $mode='r+b')
{
使用PHP 5.3.0。
我知道当从shell (使用php -a或php -r)执行代码时,您可能会得到指向第0行的错误。我还知道,当在执行自定义异常处理程序的过程中抛出异常时,您可能会得到第0行错误。这些是PHP可能无法为我提供错误行号的逻辑原因。但是现在我得到了第0行的错误,即使我没有做另外两件事。这类事情:
Fatal error: Call to a member function items() on a non-object in /Users/ole/pap/gtd/fu/lib/tree.php on line 0
我在这里请求帮助调试我的代码,并不是因为PHP没有为我提供正
我试图在CLI程序中建立一个类似于“池”的结构,其中包括大量的“借款”和“回收”。在测试的过程中,我遇到了一些意想不到的事情:
<?php
class FOO
{
public static $pool=[];
public static function get()
{
if(empty(self::$pool))
{
self::$pool[]=new self(mt_rand(1000,9999));
}
return array_shift(self::$pool);
为了保持一致性,我从PHP7.1开始指定,用于所有方法,包括像这样的神奇方法,甚至当隐式返回类型为void类似于时
class a {
function __toString() : string {}
function __unserialize ( array $data ) : void {}
function __wakeup() : void {}
}
当我对进行同样的尝试时,如下所示:
class a {
function __construct() : void {}
function __destruct() : void {}
function __c