"Junior\\classes\\": "classes"
"Vasya\\classes1\\": "classes1"?
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
Конструкция use импортирует класс из другого пространства имен, а оператор as устанавливает для него псевдоним.
include __DIR__./'classes/myclass.php';
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
Евгений Иванов, странно, должен быть там же
using System.Windows.Threading;
// Для нестатического поля, метода или свойства "Dispatcher.Invoke(Action)" требуется ссылка на объект.
Dispatcher.Invoke(() => richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname));
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.DirectoryServices;
using System.Diagnostics;
using System.IO;
using ExcelDataReader;
using System.Threading;
using System.Windows.Threading; // Тип или имя пространства имен "Threading" не существует в пространстве имен "System.Windows" (возможно, отсутствует ссылка на сборку).
using System.Threading;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
//..
Users.onUserAdd += (userSurname) =>
{
Dispatcher.Invoke(() => richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname)); // Dispatcher не существует в текущем контексте.
};
public partial class Form1 : Form
{
//.......
private void Button1_Click(object sender, EventArgs e)
{
string data1= TextBox1.Text;
string data2= TextBox2.Text;
Users.onUserAdd += (userSurname) =>
{
richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname); // Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'richTextBox1' не из того потока, в котором он был создан.
};
// Сообщаем метод Add с потоком и запускаем поток.
new Thread(() => Users.Add(data1, data2)).Start();
}
}
public class Users
{
public delegate void UserData(string userSurname);
public static event UserData onUserAdd; // Сделал статик
public static void AddUsers(string data1, string data1)
{
// Тут код добавления пользователя.
// Вывод фамилии добавленного пользователя в текстовое поле.
// Ошибка Для нестатического поля, метода или свойства "Users.onUserAdd" требуется ссылка на объект.
onUserAdd(userSurname); //упадет если никто не подписался
onUserAdd?.Invoke(userSurname); //не упадет если никто не подписался
}
в классе Users объявляем делегат и событие- ясно.
и ниже по тексту вызываем наше событие кодом следующего вида- написал этот код в методе, сообщаемом с потоком.
а в форме перед запуском треда назначаем обработчик- не понял, куда писать этот код.
public partial class Form1 : Form
{
//.......
private void Button1_Click(object sender, EventArgs e)
{
string data1= TextBox1.Text;
string data2= TextBox2.Text;
// Сообщаем метод Add с потоком и запускаем поток.
new Thread(() => Users.Add(data1, data2)).Start();
}
}
public class Users
{
public delegate void UserData(string userSurname);
public event UserData onUserAdd;
public static void AddUsers(string data1, string data1)
{
// Тут код добавления пользователя.
// Вывод фамилии добавленного пользователя в текстовое поле.
// Ошибка Для нестатического поля, метода или свойства "Users.onUserAdd" требуется ссылка на объект.
onUserAdd(userSurname); //упадет если никто не подписался
onUserAdd?.Invoke(userSurname); //не упадет если никто не подписался
}
'chat_id' => 'the_chat_id_here'
container" is already in use by container "45c2...". You have to remove (or rename) that container to be able to reuse that name.
И зачем такие сложности?
У тебя контейнер с MySQL подключен к сети site-app-network, а контейнер с PHP подключен к дефолтной сети.
docker run -d -p 80:80 -v C:/DATA/OpenServer/domains/site.local/DOCKER/app:/var/www/app --name=site-app-container site-app
docker network create -d bridge site-app-network
docker run -d -p 3306:3306 -v $(pwd)/.data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Pass0312345 --network=site-app-network --name=site-mysql mysql:5.7.24
из bash внутри контейнера?
winpty docker exec -it techmap3-mysql bash
mysql -u root -pPass0312345
Вы имели ввиду, что мы можем написать его любым?
Это понятно, что мы не обязаны ориентироваться на структуру каталогов.
Но, для корректной работы, неймспейс в json и в указанной папке (php файлах в этой папке) должны совпадать.
Спасибо, идею понял - но всё равно логика и архитектурное решение странное.
Пишем кучу классов и инклудим всё в автолоад.
Автолоад подключаем во все файлы (или в индекс).
В десктопных языках подключаются только те классы, пространства, которые нужны.
И тот же Visual Studio автоматически выделяет серым не используемые пространства имен и не включает их при сборке.
И всё это даже не компилируется (там промежуточный язык и своя виртуальная машина), а вынесено в отдельный фреймворк (.NET). В результате приложение получается быстрым (ничего лишнего не загружается) и компактным (20-50 килобайт).
До композера, в PHP, я просто инклудил что нужно, куда нужно.
В PHP, как я понял, мы просто собираем всё в кучу чтобы не "заморачиваться" с инклудами - у нас заинклужено всё, осталось для доступа прописать неймспейс, который часто един для всех файлов в одной папке...