当前位置: 首页 > news >正文

可以自己做斗图的网站如何用腾讯云做网站

可以自己做斗图的网站,如何用腾讯云做网站,ppt模板自己制作,服装设计公司排名【PECL】在扩展中实现 autoload 摘要PHP代码想这么写C 代码这么实现 摘要 php-8.3.x 用扩展写个框架。想实现类管理器,自动加载,上代码: PHP代码想这么写 $ws new \Ziima\Applet(); $ws->import(Ziima, ../base/core); $ws->runAu…

【PECL】在扩展中实现 autoload

  • 摘要
  • PHP代码想这么写
  • C 代码这么实现

摘要

php-8.3.x 用扩展写个框架。想实现类管理器,自动加载,上代码:

PHP代码想这么写

$ws = new \Ziima\Applet();
$ws->import('Ziima', '../base/core');
$ws->runAutoload();$t = new \Ziima\Template\Context();
print_r($t);

C 代码这么实现

没有文档,硬翻源代码一点点抠出来这么个思路,能用。

ZEND_METHOD(Ziima_Applet, runAutoload) {zval *this       = getThis();zend_string *req = NULL;ZEND_PARSE_PARAMETERS_START(0, 1)Z_PARAM_OPTIONALZ_PARAM_STR(req)ZEND_PARSE_PARAMETERS_END();//[1] 没有参数 , 或者 this._auto 未设置,判断是PHP调用 runAutoload 来注册zval *_auto = zend_read_property(ce_Ziima_Applet, Z_OBJ_P(this), ZEND_STRL("_auto"), true, NULL);if (_auto == NULL || Z_TYPE_P(_auto) != IS_OBJECT) {zval           cu, par_r;zend_function *fn = zend_hash_str_find_ptr_lc(&Z_OBJCE_P(this)->function_table, ZEND_STRL("runAutoload"));zend_create_closure(&cu, fn, ce_Ziima_Applet, ce_Ziima_Applet, this);zend_fcall_info fci;fci.size         = sizeof(zend_fcall_info);fci.object       = NULL;fci.named_params = NULL;fci.retval       = &par_r;fci.param_count  = 3;fci.params       = ecalloc(sizeof(zval), 3);ZVAL_COPY_VALUE(fci.params, &cu);ZVAL_TRUE(fci.params + 1);ZVAL_TRUE(fci.params + 2);ZVAL_STRING(&fci.function_name, "spl_autoload_register");if (zend_call_function(&fci, NULL) != SUCCESS) {zval_delref_p(&cu);RETURN_FALSE;}if (Z_TYPE(par_r) != IS_TRUE) {zval_delref_p(&cu);RETURN_FALSE;}zend_update_property(ce_Ziima_Applet, Z_OBJ_P(this), ZEND_STRL("_auto"), &cu);RETURN_TRUE;}// [2] 有参数进来,则认为是被 spl_autoload_register 调用的if (req == NULL) {RETURN_FALSE;}zval *_vendor = zend_read_property(ce_Ziima_Applet, Z_OBJ_P(this), ZEND_STRL("_vendor"), true, NULL);if (_vendor == NULL || Z_TYPE_P(_vendor) != IS_ARRAY)RETURN_FALSE;if (zend_array_count(Z_ARR_P(_vendor)) < 1)RETURN_FALSE;// [3] 类加载器只能处理有命名空间的if (!nstr_contains(req->val, req->len, '\\'))RETURN_FALSE;vector_object *vreq   = vector_split_ex(req->val, req->len, '\\', VCONF_AUTO_TRIM | VCONF_DENY_EMPTY);vector_item   *ve     = vector_first(vreq);zend_string   *ns_req = zend_string_init(ve->key.val, ve->key.len, false);zend_string   *dp_req = NULL;zend_long      h      = 0;zend_string   *k      = NULL;zval          *v      = NULL;// [4] 找登记路径ZEND_HASH_MAP_FOREACH_KEY_VAL(Z_ARR_P(_vendor), h, k, v)if (k->len != ns_req->len)continue;if (strncasecmp(k->val, ns_req->val, ns_req->len) == 0) {dp_req = zend_string_dup(Z_STR_P(v), false);break;}ZEND_HASH_FOREACH_END();if (dp_req == NULL) {vector_destroy(vreq);zend_string_release(ns_req);RETURN_FALSE;}// [5] 拼路径buf_string tmp;bstr_init(&tmp, dp_req->len + req->len + 64);bstr_append(&tmp, dp_req->val);if (tmp.val[dp_req->len - 1] == '/') {tmp.val[dp_req->len - 1] = 0;tmp.len--;}VECTOR_FOREACH_BEGIN(vreq, h, ve)if (h == 1)continue;bstr_append_char(&tmp, '/');bstr_append_ex(&tmp, ve->key.val, ve->key.len);VECTOR_FOREACH_END();vector_destroy(vreq);bstr_append(&tmp, ".php");// [6] 查文件zend_string_release(ns_req);zend_string_release(dp_req);if (access(tmp.val, F_OK) != 0) {bstr_free(&tmp);RETURN_FALSE;}// kdebug("load %s from %s", ns_req->val, tmp.val);// [7] 用 eval + include_once 包含bstr_append(&tmp, "');");const char *ps = "include_once('";uint32_t    ls = strlen(ps);memmove(tmp.val + ls, tmp.val, tmp.len);memcpy(tmp.val, ps, ls);if (zend_eval_string(tmp.val, NULL, "ziima_autoload_script") != SUCCESS) {bstr_free(&tmp);RETURN_FALSE;}bstr_free(&tmp);RETURN_TRUE;
}
http://www.yayakq.cn/news/647703/

相关文章:

  • 最好的做网站公司有哪些怎样提高网站首页权重
  • 更改网站的布局短网址是什么
  • 炉石吐司做的网站找加工订单的网站
  • 公司给别人做的网站违法吗广州推广公司
  • 网站网页设计的公司最新时事热点
  • 80s网站建设工作室宁波广告公司
  • 企业网站建设首选智投未来1签名设计在线
  • 开发设计移动网站建设多方会议系统平台
  • 网站后台数据库怎么做蚌埠app制作公司
  • 专业建设物流行业网站网站排名必做阶段性seo策略
  • 贵港网站建设兼职国外公司建站系统
  • 手机wap网站程序官网排名优化方案
  • 医疗知识普及网站开发网站建设最便宜多少钱
  • 淘宝做网站被骗wordpress搜索标签
  • 网站后台维护网页制作与设计作业在哪搜题
  • 建设信用卡网站登录wordpress 制作网站
  • 发布新闻最快的网站wordpress 所属分类
  • 成都网站开发费用中山有做网站的公司吗
  • 南昌网站排名优化费用网站在线沟通工具
  • 怎么能将网站做的不简单网站开发进度缓慢
  • 营销外贸网站建设域名商的网站
  • 国外域名抢注网站营销网站怎样做
  • wordpress小说站数据库天猫商城官网首页
  • 莱芜建设银行网站做宴会网站
  • 制作企业网站新闻列表页面网页设计企业网站设计与规划论文
  • 动漫网站做毕业设计简单吗伊利网站建设
  • 虹桥做网站公司中小企业的网站建设
  • 娱乐建网站python爬虫 wordpress
  • 介绍自己的做的网站南京整站优化
  • 网站建设招标无锡WordPress搭载个人博客