RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-234355

Mcile's questions

Martin Hope
Mcile
Asked: 2025-03-06 18:47:37 +0000 UTC

css 中的双滑块如何制作?

  • 5

当我连续添加 2 个滑块时,它们之间会有间隙,但如果我将它们重叠,则下面的滑块无法使用

.range-wrapper {
  display: flex;
  align-items: center;
  position: relative;
  height: 34px;
  margin-top: 20px;
}

[type="range"] {
  position: absolute;
}
<div class="range-wrapper" data-already-init="1">
  <input class="custom-range" type="range" min="4235" max="14835" step="100" value="4235">
  <input class="custom-range" type="range" min="4235" max="14835" step="100" value="14835">
</div>

html
  • 1 个回答
  • 45 Views
Martin Hope
Mcile
Asked: 2022-11-30 21:41:33 +0000 UTC

在 css 中对角线划线价格

  • 6

带价格的字段总是长短不一,对角线的角度会不断变化。让它成为纯CSS

css
  • 1 个回答
  • 24 Views
Martin Hope
Mcile
Asked: 2022-08-01 23:48:04 +0000 UTC

PHP在HTML文本中转义js代码

  • 1

例如,html 是从外部服务器传给我们的——我们需要将其与 js 代码屏蔽,以便我们可以将其以相同的形式插入到站点中。如何在php中正确执行?有内置功能吗?<scrip></script>HTML元素中除了标签,标签onload="",可以嵌入onerror="",还有什么可以作为xss攻击,如何逃逸呢?

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2022-05-27 19:11:58 +0000 UTC

函数参数声明 - 传递类名

  • 1

例如,有一个任意类,例如class Shop implements \IShop {},还有另一个类

class Product
{
 private $shop;

 public function __construct(\IShop $shop)
 {
  $this->shop = $shop;
 }
}

$product = new Product(Shop::class);

会出错,因为它Shop::class是作为字符串传递的,并且不需要实例 - 因为所有方法都是静态的,所以我尝试在参数中指定类型而不是类,而是接口 - 结果是一样的。

问题:如何进行检查 - 这正是我需要的类或接口,即使基于接口

php
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2021-10-28 20:28:07 +0000 UTC

未通过 docker-compose 挂载的文件夹

  • 0

码头工人-compose.yml

version: '3'

services:
  db:
    image: "mysql"
    environment:
      MYSQL_ROOT_PASSWORD: "1234"
    ports:
      - "3306:3306"
    volumes:
      - .\mysql:/var/lib/mysql
  php:
    image: "php:7.4-fpm"
    restart: always
    links:
      - db
  nginx:
    image: "nginx"
    env_file:
      - ./conf.env
    depends_on:
      - php
      - db
    volumes:
      - D:\Михаил\homework:/var/www
    ports:
      - "8080:80"
      - "9000:9000"

WINDOWS 8.1 专业系统

D:\Михаил\homework\docker>docker-compose exec nginx /bin/bash
root@77f231a5127d:/# cd /var/www && ls -la
total 8
drwxrwxrwx 3 root root   60 Oct 28 11:29 .
drwxr-xr-x 1 root root 4096 Oct 28 11:37 ..
drwxrwxrwx 3 root root   60 Oct 28 11:29 docker
root@77f231a5127d:/var/www#

我希望在那里看到我在本地机器上的文件夹

在此处输入图像描述

但不是文件和文件夹,而是只有一个文件夹docker,其中嵌套了一个文件夹,甚至没有文件。我试图做的事情:

  1. D:\Михаил\homework以各种可能的方式使用转义斜杠和反斜杠更改文件夹的路径

  2. 尝试使用相对路径

  3. 我求助于各种论坛, 包括这个

    docker-machine rm 默认 && docker-machine create --driver "virtualbox" --virtualbox-boot2docker-url https://github.com/boot2docker/boot2docker/releases/download/v18.09.8/boot2docker.iso默认

  4. 打开 Oracle VM VirtualBox 并共享此文件夹在此处输入图像描述

  5. 每次尝试或更改后,我都会执行命令

    docker-compose down && docker-compose up -d --build

我是码头工人的新手

D:\Михаил\homework\docker>docker-compose up -d --build
Creating network "docker_default" with the default driver
Creating docker_db_1 ... done
Creating docker_php_1 ... done
Creating docker_nginx_1 ... done

D:\Михаил\homework\docker>docker-compose logs nginx
Attaching to docker_nginx_1
nginx_1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
nginx_1  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
nginx_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx_1  | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
nginx_1  | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
nginx_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx_1  | /docker-entrypoint.sh: Configuration complete; ready for start up

D:\Михаил\homework\docker>

告诉我需要做什么,这样通过进入docker-compose exec nginx /bin/bash并执行里面的命令,cd /var/www && ls -la我可以在那里看到我的工作子目录D:\Михаил\homework

docker-compose
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-07-01 19:18:48 +0000 UTC

数据截断:第 1 行的“chain_of_ids”列的数据太长

  • 0

MySQL 8+ 版本

有一个表是递归查询id的name,parentId 最大嵌套8级我在网上搜了怎么解决这个问题——大家都说要增加已有表的字段的维度,但是在我的查询中该表不存在于硬盘。错误是第二个表达式中的字符串太长了,但是!我试过了

将 CONCAT( id,'') 更改为 CONCAT( id,'_________________________________________________')

和 CONCAT(at. chain_of_ids,',',c. id) 到 CONCAT(at. chain_of_ids,',') - 尽管字符串比原始查询中预期的要长得多,但它可以正常工作,

chain_of_ids如果我将 CONCAT(at. ,',',c. id) 更改为 CONCAT(at. chain_of_ids,',_')我也会偶然发现此错误

WITH RECURSIVE `accumulation_table` AS (
    SELECT `id`,`name`, CONCAT(`id`,'') AS `chain_of_ids` FROM `Category` WHERE `parentId` = 0
    UNION ALL
    SELECT c.`id`,c.`name`, CONCAT(at.`chain_of_ids`,',',c.`id`) AS `chain_of_ids`
    FROM `Category` c
    JOIN `accumulation_table` at ON at.id=c.parentId
)
SELECT * FROM `accumulation_table` a
mysql
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-07-25 18:04:50 +0000 UTC

strtotime 的工作原理

  • 0

strtotime('2018-09-20 16:49:54')我抛出第一个论点。该函数对时区服务器的设置很敏感。我阅读了手册 - 我不明白。我们抛出的日期被服务器感知为零子午线的日期,并将服务器上配置的本地时间添加到其中,或者将日期视为本地时间,并且减去该本地时间以获得零子午线的时间子午线?

在一台服务器上响应 1537487394 在另一台服务器上 1537451394

php
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-03-12 04:25:14 +0000 UTC

C# 多维关联数组或属性重载

  • 0

学过java script或者php的,后来转学C#的,应该会懂我的吧。如果没有强类型和类型转换的多维关联数组,它们如何管理不善?一般来说,情况是这样的——可以写一段程序,限制为10,000个字符,任何Hashtable OR Dictionary都无法加载你自己的任何内容。使用多维关联数组的整个美妙之处在于,您可以快速 - 尽可能快地按键访问其元素 - 无论是数字还是字符串。在 PHP 中,这样的例子是

['pets'=>['cat','dog','hamster'],0=>['domestic','wild'],'properties'=>['fluffiness'],25=>[1985 , 1990,1995]]

我阅读了 C# 论坛 - 他们说 - 为什么需要关联数组?- 使用类,这当然很棒,但是如何在其他语言中访问这些类的属性(这里我们指的是世界不同语言的字母表\u200b\u200b和C#是否支持UTF-8 -例如,用俄语创建一个类属性?)还是按数字?以及如何将属性添加到 C# 中的现有对象、从对象中删除属性,或者将值分配给与该对象的属性中指定的类型不同的对象属性?

在 php 中,我会这样做:

class a
{
    protected $params = [];
    public function __set($name, $value){
        $this->params['$name'] = $value;
    }
    public function __get($name){
        return $this->params['$name'];
    }
}

$a_obj = new a();

$a_obj->some_param = [1987,'name'=>'Hero'];

echo $a_obj->some_param[0];
echo $a_obj->some_param['name'];

将输出 1987Hero

一般来说 - 亲爱的 C# 程序员,帮助我们理解 - 你如何处理数据 - 你不知道的类型和数量 - 也许你写了一些你的拐杖,比如重载方法 - 查看传入的数据类型数据所属,以指定的数据类型在 LIST 中输入 - 再次,如何将具有特定索引的数据放入 LIST 工作表,例如 [25=>'mehanic', 58=>'auto'] - 它们是通常随机放置在那里 - stack [0=>'mehanic' ,1=>'auto'] 一般来说,对于那些不明白的人 - 告诉我,我会解释我的问题。

PS这个理解主题大大减慢了对整个语言的理解,因此它似乎在使用中存在某种缺陷。感谢您的理解和阅读

添加了 2019 年 3 月 25 日遇到 Microsoft 的建议

var contacts = new[]
{
    new {
        Name = " Eugene Zabokritski",
        PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
    },
    new {
        Name = " Hanying Feng",
        PhoneNumbers = new[] { "650-555-0199" }
    }
};

资源

c#
  • 2 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-03-05 21:12:55 +0000 UTC

Drupal 7 使用多个主题

  • 1

在 Drupal 中创建了第二个主题任务是 - 在单独的页面上显示 iframe 的表单 - 因此将样式降至最低,将上传的文件降至最低。用这个页面制作了 hook_menu() 想让 css 和 js 不被扔进 html

在同一个模块中,我编写了 hook_js_alter(&$javascript) 和 hook_css_alter(&$css) 并编辑了它们接受的链接 - 剪切数组并只留下必要的连接

一切正常——我们进入页面——我们看到了我们需要的连接,但是当我们进入不同主题的页面时,Drupal 开始在那里剪切 css 和 js。

结果,我将钩子的主体(hook_js_alter(&$javascript) 和 hook_css_alter(&$css))移到了“页面回调”函数中,该函数仅适用于该页面

我重置了缓存-在带有新主题的页面上,显示了连接的css和js文件-那些需要的,无论我更新多少次,我都会转到另一个主题的页面-一切都很好-页面第一次加载很长时间 - 在 html 中我看到所有 Drupal 默认连接。我用表单回到主题 - 我更新 - (显然)缓存的 css 和 js 插件已加载。

我不明白如何使用 Drupal - 告诉程序 - 在此页面上 - 使用这些 js 文件连接,另一方面不要使用您的默认 css 和 js 连接以及所有其他模块的连接

drupal
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-03-01 23:06:38 +0000 UTC

drupal 7 多个模块在 hook_menu() 中具有相同的 $items 键

  • 1

在 Drupal 中,可以给模块 hook_menu() 并返回 $items ,其中 url 路径是关键。问题是 - 如果 hook_menu() 中的多个模块具有相同的 $items 键,例如 $items['user/manager'] - 所有的“页面回调”函数都可以工作吗?我最近才了解到,如果发生它们订阅的事件,所有模块都会工作。就像在 java-script 中一样,我们为某个事件订阅一个函数。

drupal
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-01-28 21:09:36 +0000 UTC

从另一个变量中指定一个变量的类型

  • 1

在传入的对象集合中寻找两个完全相同的函数,第一个有接口的对象,我们称它为X,唯一的区别是它们给的对象有不同的接口,告诉我如何在C#中函数不是通过代码,而是通过变量来指定返回元素的类型

例子:

IMyTextPanel getTextPanel()
{
    List<IMyTextPanel> TextPanels = new List<IMyTextPanel>();
    GridTerminalSystem.GetBlocksOfType<IMyTextPanel>(TextPanels);
    IMyTextPanel TextPanel;
    if (TextPanels.Count > 0) return TextPanels[0];
    return null;
}
IMyGyro getGyro()
{
    List<IMyGyro> Gyros = new List<IMyGyro>();
    GridTerminalSystem.GetBlocksOfType<IMyGyro>(Gyros);
    IMyGyro Gyro;
    if (Gyros.Count > 0) return Gyro = Gyros[0];
    return null;
}

我想要类似的东西:

getCube(string interface)
{
    List<interface> Cubes= new List<interface>();
    GridTerminalSystem.GetBlocksOfType<interface>(Cubes);
    if (Cubes.Count > 0) return Cubes[0];
    return null;
}

但程序抱怨它

据我了解,函数应该有一些返回格式,比如obj,但里面我不知道应该是什么

c#
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-11-10 01:55:16 +0000 UTC

DataTables 单单元格编辑

  • 0

我只知道 javascript 和 JQuery 的基础知识,我在 stackoverflow 上搜索了所有 64 个主题的答案。

简而言之:我用方法更新了jquery表格单元格的内容

$('[data-id="2"][data-name="name"]').html('Дима');
table.draw();

一切都更新得很好,甚至在 table.draw(); 行被过滤了!当过滤器被应用时,html body 消失了<tr><td></td></tr>。运行脚本假设$('[data-id="2"][data-name="name"]').html('Дима');如果这个 DOM 元素被 DataTables 过滤,即 她只是将其从 html 中删除,然后更改不适用。我更改了过滤器中的值,这条线出现了旧值。行家,告诉我你需要进入什么样的 DataTables 丛林才能改变单元格和属性的值,不管应用什么过滤器?

我看着通过 json 更新的方向——但它不适合我——我不明白如何在那里设置类和数据属性。当我只需要在客户端更改一个值时,我仍然不明白为什么要传输 40x300 json 单元(欧姆),特别是因为我已经将所有数据传输到客户端。这个原始 DOM 位于哪里<tr></tr>,因为 DataTables 在应用另一个过滤器后将其保存在内存中。

测试示例:

   var table = $('#table').dataTable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>

<table id="table">
  <thead>
    <tr>
      <th>Имя</th>
      <th>Фамилия</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td data-id="2" data-name="name">Иван</td>
      <td data-id="2" data-name="surname">Иванов</td>
    </tr>
    <tr>
      <td data-id="5" data-name="name">Вася</td>
      <td data-id="5" data-name="surname">Сидоров</td>
    </tr>
</table>

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-11-01 22:32:11 +0000 UTC

具有多个 SQL 更新的长时间运行的 php 脚本

  • 2

简而言之:“1 个查询可以在 0.5 秒内将数据写入 25,000 行,在一个循环中即使 10 分钟也不够,而在一个循环中,在 1.5 秒内执行了 25,000 次选择。有人怀疑每次更改后都会发生可怕的操作, 是否覆盖缓存, 日志条目”。

详细地

移动到新服务器后遇到问题。

php 脚本,将数据写入或更新到数据库 - 速度慢 4 倍甚至 100 倍

新服务器的磁盘写入速度为 230 MB/s,而旧服务器为 76.6 MB/s。

我认为问题出在垃圾收集器中 - 我启动了一个循环 10,000,000 次操作,其中变量递增。同样,新服务器执行命令的速度更快

所有配置的设置已被转移,没有更改

新服务器将具有两倍数量的处理器内核和 RAM。php-fpm mysql 版本是一样的。

我不知道还要测试什么,我什至不明白该往哪个方向看,因为两台机器中的设置都是一样的

从数据库中读取多个查询(在 25,000 次测试的循环中)在不同的服务器上以相同的速度发生,但写入或更新 - 具有惊人的

数据库已移至新服务器

添加了 Mysql 设置 - 但它们没有帮助 - 这些是

#Фича, которая избавляет от постоянной записи в логи сразу после добавления инфы
innodb_flush_log_at_trx_commit = 2
#Вырубаем буферизацию таблиц для файловой системы и говорим MySQL обращаться к файлам напрямую
innodb_flush_method = O_DIRECT
#Отключение двойной буферизации
innodb_doublewrite = 0

基本设置

query_cache_limit   = 1M
query_cache_size = 16M
log_error = /var/log/mysql/error.log
slow_query_log_file = /var/log/mysql/mysql-slow.log
slow_query_log      = 1

[mysqldump]

quick
quote-names
max_allowed_packet  = 16M

[isamchk]

key_buffer      = 16M

今天我尝试用插入到 100 行数据库中的相同文本编写 1000 个文件,结果令我惊讶:它在 0.14 秒内写入 1000 个文件,在 3.2 秒内写入数据库中的 100 行,而一个 MySQL 查询可以填满25,000行0.5秒——什么样的现象还没弄清楚

测试代码

for( $i=0; $i < 100; $i++ ){
    $site->mySqli->query('UPDATE `test_table` SET `test`= \''.$text.'\' WHERE `id` =  \''.$i.'\' ) ');
}
php
  • 3 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-09-26 14:52:58 +0000 UTC

将文本添加到光标所在的文本区域

  • 3

我遇到了一个问题 - 如何将文本插入到光标位于按钮单击的文本区域中。可以是bb-code或者prepared text

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-08-16 23:30:23 +0000 UTC

网络套接字连接

  • 2

等待 10 秒后,我无法通过 websocket 连接到我自己的端口http://localhost:1100上的服务器 ,它在浏览器控制台中出现错误

'wss://tel.buy-tires.ru:1100/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

javascript代码

<script>
            var socket= new WebSocket('ws://tel.buy-tires.ru:1100/');
            socket.onopen = function() {
              console.log("Соединение установлено.");
            };
        </script>

服务器在端口 1100 上有一个服务器套接字。如果您使用 sudo lsof -i 命令监听所有端口,它会给出

TCP localhost:1100 (LISTEN)

尝试配置nginx

location /ws/ {
    proxy_pass http://localhost:1100;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

}

在此服务器上运行的套接字客户端可以与 ip localhost 端口 1100 上的套接字服务器正常通信

我要求管理员在 pfsense 上打开端口 1100 - 他们打开了它。

在以管理员身份通过 telnet 启动的 Windows 命令行中,我在端口 80 上进行了监听 - 连接已建立,但无法爬升至 1100。这是我第一次遇到这种设置,我阅读了很多文章-实际上,我所做的所有操作都是从那里采取的。我不知道该怎么做。

17.08.2017

感谢@D-side,我明白了为什么不能监听来自外部的传入连接,因为我没有地址因为地址,但是按照nginx的设置,我不得不联系

 var socket= new WebSocket('ws://tel.buy-tires.ru/ws/');

现在服务器看到有一个到套接字的连接,但由于某种原因,浏览器 websocket 没有看到我放入套接字缓冲区的消息 - 服务器以 http 标头形式的响应 - 经过长时间的等待,nginx代码生成的header 502来了,虽然我发的是101

我也不需要 nginx 欺骗的 INCOMING 标头,所以我将设置简化为

location /ws/ {
    proxy_pass http://localhost:1100;
}

当我切断套接字服务器时,网络套接字等待响应 - 它立即反应连接断开

php
  • 2 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-08-09 22:23:33 +0000 UTC

NGINX URL 中的自动更正字符

  • 0

情况的本质:有许多新的url,它们与旧的不同之处在于_符号被替换为-

海配置。我发现使用 301 重定向

location uri {
}

我可以使用正则表达式。问题是在破折号上使用下划线对所有可能的 url 选项进行排序将占用 nginx 配置文件中的一百多行,而且我不会考虑所有选项。 .

问题 - nginx 中是否有类似的 AUTOCHANGE 功能

location ~ \/(tyres|wheels)\/([^\/]+)\/([^\/]+)\/ {
  set $brand str_replace( '_', '-', $2 );
  set $model str_replace( '_', '-', $3 );
  return 301 /$1/$brand/$model/;
}

网址示例

/tyres/tri_ace/steady_33/
/wheels/m_and_k_forged_wheels/
/tyres/tri_ace/carrera/
php-nginx
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-07-25 20:14:22 +0000 UTC

在 jquery javascript 循环中填充数组

  • 1

使用 jQuery 循环.each(function(){});

例子:

var arr = [],
  check = '';
$('.commander_check').each(function() {
  if (
    $(this).prop('checked') && $(this).data('check') == '' ||
    !$(this).prop('checked') && $(this).data('check') == 'checked'
  ) {
    check = $(this).prop('checked') ? 'ON' : 'OFF';
    arr[$(this).data('login')][check].push({
      'id': $(this).data('id'),
      'profit': $(this).data('profit')
    });
  }
});
console.log(arr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<input type="checkbox" class="commander_check" data-check="checked" data-id="19727899" data-login="old" data-profit="ok">

我想得到一个数组['old']['OFF'][['id'=>19727899, 'profit'=>'ok'],[...],...]

但由于某种原因它会抛出一个错误Cannot read property 'OFF' of undefined

任务:遍历复选框参数,如果.prop('checked')不匹配$(this).data('check')则写入多维关联数组,所以实际记录不起作用

javascript
  • 3 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-05-21 01:13:28 +0000 UTC

俄语 SSH 控制台中的注释不正确

  • 0

我通过 SSH 进入虚拟机的控制台;已安装:composer、git、phpunit 并且无法进行第一次提交 -m '' - 不允许以俄文字母打印,控制台的行为不可预测。为了清楚起见,我进入了我通过 mc 遇到的第一个文本文件,并在那里输入了俄语字母表中的所有字母(不是按字母顺序排列) - 视图很糟糕

Debian 8 终端 /bin/bash

如何支持俄文字母?

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

debian
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-05-18 17:24:43 +0000 UTC

Symfony 3.2 Doctrine2 ORM 将复杂查询存储为类

  • 0

美好的一天,Symfony 专家我已经学习 Symfony 3.2 第三天了。我学会了如何访问多个数据库并尝试了一点 Doctrine 2

一切顺利。请告诉我在哪里可以存储数据库查询库,这样我就不必在不同的控制器中使用重复查询。

如果不清楚,我会解释

有一个控制器,例如这个 src/ParserBundle/EmployeesController.php

它有吸引力

$repository = $this->getDoctrine()->getRepository('ParserBundle:Provider');
$providers = $repository ->findAll();

有一个用于查询数据库的类,例如这个 src/ParserBundle/Entity/Provider.php

如何进行复杂查询,我可以从 Doctrine 2 文档中阅读,但我应该将它们存储在哪里以免重复?以及如何从主控制器访问它们——是否有关于此的文档?

symfony
  • 1 个回答
  • 10 Views
Martin Hope
Mcile
Asked: 2020-04-25 15:25:52 +0000 UTC

静态属性

  • 1

我自己注意到类实例中静态属性的异常行为,有一段代码:

    class A{
        public static $key=0;
        public function getKey(){
            return self::$key;
        }
    }
    class B extends A {}
    A::$key = 1;
    $b = new B();
    echo $b->getKey();

到这里一切都清楚了,我们改变了类的静态属性 A::$key = 1; 从客户端。之后,类 A 的任何实例或此类的继承者(在本例中为 B)的静态属性 $ key 的值都会发生变化

但是下面的代码让我变得无法理解——在下面的代码中,我们更改了类实例的静态属性,这自动影响了类的静态属性。这是什么 ?- 这个类的所有继承人中的某个全局变量?这是代码

<?php 

    class A{
        protected static $key=0;
        public function plus(){
            ++self::$key;
        }
        public function getKey(){
            return self::$key;
        }
    }
    class B extends A {}
    $a = new A();
    echo $a->getKey().'</br>';
    $a->plus();
    echo $a->getKey().'</br>';
    $b = new B();
    echo $b->getKey().'</br>';

发出

0
1
1

这是另一个代码

<?php 

    class A{
        protected static $key=0;
        public function plus(){
            ++self::$key;
        }
        public function getKey(){
            return self::$key;
        }
    }
    class B extends A {}
    $a = new A();
    echo $a->getKey().'</br>';
    $b = new B();
    $a->plus();
    echo $a->getKey().'</br>';
    echo $b->getKey().'</br>';

发出

0
1
1

结果,任何继承人中静态属性的任何更改都会自动更改所有实例中的静态属性 - 继承人。好吧,这是全局变量的替代方法,或者我不明白某些东西,并且出于某种原因他们没有在教科书中写到它。

基于@perfect words

设置一个实验

<?php 

    class A{
        protected static $key=0;
        public function plus(){
            ++self::$key;
        }
        public function getKey(){
            return self::$key;
        }
    }
    class B extends A {}
    class C extends A {}
    $b = new B();
    $c = new C();
    $b->plus();
    echo $c->getKey().'</br>';

发出

1

因此,它们具有全局可见性——无论类实例位于何处

但这还不是全部,正如@chernomyrdin 在引用同一个静态变量时的实践所示——您可以访问 RAM 的不同部分。这样一来,不同的值可以存储在同一个变量中

<?php 

    class A {
        protected static $key=0;
        public function getGlobalKey(){
            return self::$key;
        }
        //применяем позднее статическое связывание
        public function getCurrentKey(){
            return static::$key;
        }
        public function plusGlobalKey(){
            ++self::$key;
        }
        //применяем позднее статическое связывание
        public function plusCurrentKey(){
            ++static::$key;
        }
    }
    class B extends A{
        protected static $key=0;
    }
    class C extends B{}
    $a = new A();
    $a->plusGlobalKey();
    $b = new B();
    echo $a->getCurrentKey().'<br/>';
    echo $b->getCurrentKey().'<br/>';
    echo $b->getGlobalKey().'<br/>';
    $a->plusGlobalKey();
    echo '<hr/>';
    echo $a->getCurrentKey().'<br/>';
    echo $b->getCurrentKey().'<br/>';
    echo $b->getGlobalKey().'<br/>';
    $b->plusCurrentKey();
    echo '<hr/>';
    echo $a->getCurrentKey().'<br/>';
    echo $b->getCurrentKey().'<br/>';
    echo $b->getGlobalKey().'<br/>';
    echo '<hr/>';
    $c = new C();
    echo $c->getCurrentKey().'<br/>';
    echo $c->getGlobalKey().'<br/>';

显示

1
0
1
-----------------
2
0
2
-----------------
2
1
2
-----------------
1
2

总结:@perfect - 解释了为什么会这样

@chernomyrdin - 推到后期静态绑定的主题 - 在最后一个例子中,我只是理解它是如何工作的

php
  • 2 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5