PHP中是否可以在调用类中的函数时触发事件,而不将其添加到类中的每个函数中?
例:
<?php
class A {
function xxx() {
//this function will be called everytime I call another function in this class
}
public static function b() {
return 'Hello Stackoverflow!';
}
public static function c() {
//I also want this function to trigger the event!
}
}
echo A::b();
?>
Run Code Online (Sandbox Code Playgroud) 我在互联网上读到APC将包含在PHP6中.然而,PHP6项目被取消了,他们跳过了一个主要版本,以避免混淆,这再次引起更多的混乱.然而这又是另一次讨论.
我的问题是:
是否仍会在PHP7中引入,包含和启用APC或任何其他缓存模块?
我问的原因是因为我正在考虑将memcached实现到我的项目中.但是如果在PHP7中存在本机缓存解决方案,我宁愿坚持这一点.
如何使用扩展名将参数从主线程传递到PHP中的新线程pthreads?
与此类似的东西如何将参数传递给Java线程?只是在PHP中。
我想提出一个多线程的CLI-PHP应用程序和需要序列化PDO object工作之间传递的线程内,并使用魔术方法睡眠线程唤醒它__sleep()和__wakeup().然而,PDO或者mysqli扩展不支持它.旧mysql_*()api做了这个,但它已被弃用并删除.
<?php
// Application
$link = new PDO('mysql:host=localhost;port=3306;dbname=testdatabase', 'root', '');
$obj = serialize($link);
Run Code Online (Sandbox Code Playgroud)
很好地产生错误
PHP致命错误:未捕获异常'PDOException',并在W:\ workspace\Sandbox\application.php中显示消息'您无法自定义或反序列化PDO实例':5堆栈跟踪:
#0 [内部函数]:PDO - > __ sleep()
#1 W:\ workspace\Sandbox\application.php(5):serialize(Object(PDO))
在第5行的W:\ workspace\Sandbox\application.php中抛出#2 {main}
所以ob_start()应该以捕捉输出,直到另一个缓冲区函数被调用一样ob_get_clean(),ob_get_contents(),ob_get_flush().
但是当缓冲区读取器内部抛出异常时,它会通过停止并回显输出而不是继续捕获它来影响读取器.这是我想要防止的.
让我们说这是我的脚本:
<?php
error_reporting(0);
try {
ob_start();
echo "I don't wanna output this what so ever, so want to cache it in a variable with using ob_ functions";
$unlink = unlink('some file that does not exist');
if(!$unlink) throw new Exception('Something really bad happen.', E_ERROR); //throwing this exception will effect the buffer
$output = ob_get_clean();
} catch(Exception $e) {
echo "<br />Some error occured: " . $e->getMessage();
//print_r($e);
}
?>
Run Code Online (Sandbox Code Playgroud)
该脚本将输出:
I …Run Code Online (Sandbox Code Playgroud) 是否有可能在PHP中使用MySQLi更新具有数组的表而不知道字段名称,有多少及其值.
我尝试过在密钥和值字段上插入问号的预备语句(?=?).我在想是否可以在更新查询中使用()VALUES()我可能有一个解决方案,但我猜不存在这样的事情.
看看我的剧本:
<?php
class UserHandler {
public function updateUserData($array, $id) {
global $mysqli;
$stmt = $mysqli->prepare("UPDATE users SET ?=? WHERE id = ?");
$stmt->bind_param('ssi', $array[0], $array[1], $id);
$stmt->execute();
return true;
}
}
$users = new UserHandler;
?>
Run Code Online (Sandbox Code Playgroud)
我希望用法如下:
<?php
$users->updateUserData(array(
'firstname' => 'Wanda',
'lastname' => 'Merritt',
'state' => 'IN'
'address' => '693 Pearcy Avenue',
'zipcode' => 46625,
), 45);
$users->updateUserData(array(
'firstname' => 'Stanley',
'lastname' => 'Lewis',
'password' => '123123'
), 159);
?>
Run Code Online (Sandbox Code Playgroud) 我正在创建一个通配符搜索/替换函数,需要找到两个字符串之间的差异.我尝试过的一些功能,如array_diff和preg_match,浏览我的路槽〜无解10页谷歌.
我现在有一个简单的解决方案,但希望在通配符之前实现对未知值的支持
这是我得到的:
function wildcard_search($string, $wildcard) {
$wildcards = array();
$regex = "/( |_|-|\/|-|\.|,)/";
$split_string = preg_split($regex, $string);
$split_wildcard = preg_split($regex, $wildcard);
foreach($split_wildcard as $key => $value) {
if(isset($split_string[$key]) && $split_string[$key] != $value) {
$wildcards[] = $split_string[$key];
}
}
return $wildcards;
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
$str1 = "I prefer Microsoft products to Apple but love Linux"; //original string
$str2 = "I prefer * products to * but love *"; //wildcard search
$value = wildcard_search($str1, $str2);
//$value …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 php 中构建简单的配置系统,您可以在其中扩展基础并将数据放入子类中,而父类会为您处理一切。我会让代码不言自明。但是,当我尝试这样做时,子类不会更改父变量。
父类
class ConfigBase {
protected static $data = [];
public static function Get($name)
{
if(!isset(self::$data[$name]))
{
return null;
}
return self::$data[$name];
}
public static function Set($name, $value)
{
self::$data[$name] = $value;
}
}
Run Code Online (Sandbox Code Playgroud)
儿童班
class Database extends ConfigBase {
protected static $data = [
'host' => 'localhost',
'username' => 'root',
'password' => '',
'database' => '',
'port' => 3306
];
}
Run Code Online (Sandbox Code Playgroud)
输出:
// NULL
echo Database::Get('host');
Run Code Online (Sandbox Code Playgroud)
有没有办法/解决方法/黑客来完成这个?
我试图创建一个JavaScript函数,用一个更高的数字替换一个数字,但我无法让它工作.
我尝试了许多没有运气的事情.
<script type="text/javascript">
function change(text) {
var array = {"1":"6", "2":"7", "3":"8", "4":"9", "5":"0", "6":"1", "7":"2", "8":"3", "9":"4", "0":"5",}
for (var val in array)
text = text.replace(new RegExp(val, "g"), array[val]);
return text;
}
document.write(change('123456789'));
</script>
Run Code Online (Sandbox Code Playgroud)
这会返回,123401234但应该返回6789012345
我也试过这个:
function change_new(text) { text = text.replace(/1/g, "6").replace(/2/g, "7").replace(/3/g, "8").replace(/4/g, "9").replace(/5/g, "0").replace(/6/g, "1").replace(/7/g, "2").replace(/8/g, "3").replace(/9/g, "4").replace(/0/g, "5"); return text; }
Run Code Online (Sandbox Code Playgroud)
结果相同.
我究竟做错了什么?