PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (59): « 1 2 [3] 4 5 6 7 8 9 ... » В конец
Найдено сообщений: 881
Vladimir Kheifets
Отправлено: 14 Августа, 2022 - 21:03:06 • Тема: Как разбить текстовый файл на страницы? • Форум: Напишите за меня, пожалуйста
Ответов: 22 Просмотров: 2908
Irina88 пишет: Владимир!
Ну не знаю. Я добавила кавычки, и страница загрузилась. Хотите сказать, что на сервере была "пятерка"?
Ирина!
Версия PHP, на которой я видел, что это работает была 5.4.
И в $_POST и $_GET это тоже проходило.
Для Вас вожно понять то, что ошибка 500, происходит из-за того,
что возникает фотальная ошибка PHP, а erro_reporting отключён.
Поэтому HTML-request, хотябы с сообщением об ошибке браузер не получает.
Vladimir Kheifets
Отправлено: 13 Августа, 2022 - 22:38:10 • Тема: Скрипт голосования • Форум: Напишите за меня, пожалуйста
Ответов: 6 Просмотров: 1031
Irina88 пишет: После смены версии пхп, перестал работать скрипт голосования:
CODE (
htmlphp ):
скопировать код в буфер обмена
<? php
// получаем файлы по определенному голосованию
$id = ( int) $_GET [ id] ;
$vote = ( int) $_GET [ vote] ;
$ip = $_SERVER [ 'REMOTE_ADDR' ] ;
// если это не просто просмотр результатов
if ( $vote ) {
foreach ( $ip_abbr as $value )
if ( $ip == $value ) { echo "<p><b><font color=red> Вы уже голосовали! </font></b></p>" ;
}
// выводим благодарность
echo "<p><b><font color=green> Спасибо! </font></b><br /><i>*Показаны результаты до Вашего голосования:</i><p>" ;
}
// выводим заголовок голосования - 1я строка файла
echo "<table border=0 style='text-align:left' ><th colspan=3 style='text-align:center'><b>$data[0] </b></th>" ;
// печатаем список ответов и результатов - остальные строки
for ( $i = 1 ; $i < count( $data ) ; $i ++ ) {
$votes = explode ( "~" , $data [ $i ] ) ; // значение~ответ $graf = 100* $votes [ 0] / ( count ( $ip_abbr ) - 1) ; echo "<tr><td>$votes[1] </td><td style='text-align: center'><b>$votes[0] </b></td><td> <span style='font-size: small'>" . round ( $graf , 3 ) . "%</span><div style='background: red; height:5px; width:" . round ( $graf , 0 ) . "px'></div></td></tr>" ; }
echo "<tr><td>Всего<b></b></td><td>" . ( count ( $ip_abbr ) - 1 ) . "</td><td> </td></tr></table>" ; // если это не просмотр результатов, а голосование,
// производим необходимые действия для учета голоса
if ( $vote ) {
$f = fopen ( "$id .dat" , "w" ) ; for ( $i = 1 ; $i < count( $data ) ; $i ++ ) {
if ( $i == $vote ) $votes [ 0] ++;
fputs ( $f , "$votes[0] ~$votes[1] " ) ; }
$ip_adr = fopen ( "ip$id .dat" , "a++" ) ; fputs ( $ip_adr , "$ip " . "," ) ; }
} else {
echo "Такого голосования не существует." ;
}
?>
ERROR 500
Добрый день, Ирина!
См.:
https://www.php.net/manual/ru/function.count.php
Цитата: 8.0.0 count() теперь выбрасывает TypeError, если передан недопустимый исчисляемый тип в параметр value.
https://www.php.net/manual/ru/co...ures.foreach.php
Цитата: Конструкция foreach предоставляет простой способ перебора массивов. foreach работает только с массивами и объектами, и будет генерировать ошибку при попытке использования с переменными других типов или неинициализированными переменными.
Лекарство:
Удачи!
Vladimir Kheifets
Отправлено: 13 Августа, 2022 - 22:12:53 • Тема: Как разбить текстовый файл на страницы? • Форум: Напишите за меня, пожалуйста
Ответов: 22 Просмотров: 2908
Irina88 пишет: Владимир!
Цитата: Ваша проблема не в смене версии PHP на сервере.
Какраз там и проблема. В коде по ошибке было написано
На "семерке" этот номер проходил. А на "восьмерке" - не катит. Надо
Ирина!
В Вашем коде $today = date(Y); Вы не показали,
но это работало где-то на "пятерки", а на "семёрке" это выдает:
Warning: Use of undefined constant Y - assumed 'Y' (this will throw an Error in a future version of PHP) in ...
Однако Вы написали про "HTML Error 500", а это наврядли с этим связано.
Vladimir Kheifets
Отправлено: 13 Августа, 2022 - 06:45:48 • Тема: Как разбить текстовый файл на страницы? • Форум: Напишите за меня, пожалуйста
Ответов: 22 Просмотров: 2908
Ирина!
В Вашем коде была фотальная ошибка PHP
Parse error: Invalid body indentation level (expecting an indentation level of at least 7) in ........... on line 23
из-за того, что в
<<<HTML
в начале строк были символы таб и пробелы
HTML;
<body> тоже подправил
Здесь рабочий код
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
//include "./settings.php";
$StartLine = 0 ;
$nLines = 10 ;
$title = "IPTV-плейлисты m3u" ;
function ReadLinesFromFile( $StartLine , $nLines , $file ) {
$EndLine = $StartLine + $nLines ;
$line = $StartLine ;
$news = [ ] ;
while ( $line < $EndLine ) {
$file -> seek ( $line - 1) ;
$news [ ] = $file -> current ( ) ;
$line ++;
}
return $news ;
}
echo <<<HTML
<html>
<head>
<meta name='description' content='IPTV-плейлисты m3u'>
<meta name='description' content='IPTV-плейлисты m3u Украина'>
<META NAME='TITLE' CONTENT='IPTV-плейлисты m3u Украина'>
<META NAME='DESCRIPTION' CONTENT='IPTV-плейлисты m3u Украина.'>
<title> $title </title>
</head>
<body>
<img src='iptv.jpg' width='100%' height='300' alt=''><br>
HTML ;
$file = new SplFileObject( 'enter.txt' ) ;
$file -> seek ( PHP_INT_MAX) ;
$linesTotal = $file -> key ( ) + 1 ;
$LineInPage = 10 ;
$Pages = ceil ( ( $linesTotal ) / $LineInPage ) ; $page = isset ( $_GET [ 'page' ] ) ?
$_GET [ 'page' ] : 1 ;
$StartLine = ( $page - 1) * $LineInPage + 1 ;
$news = ReadLinesFromFile( $StartLine , $LineInPage , $file ) ;
foreach ( ( Array ) $news as $line ) echo "$line <br>" ; echo "<hr>" ;
$previewPage = $page - 1 ;
$nextPage = $page + 1 ;
if ( $previewPage > 0)
echo "<a href='?page=$previewPage '><<<</a> " ;
echo " <select></select> " ;
if ( $nextPage <= $Pages )
echo " <a href='?page=$nextPage '>>>></a>" ;
echo <<<HTML
<br>
<img src='iptvplayerlogo.png' alt=''>
<a href='load.php'>СКАЧАТЬ IP-TV_player</a><br>
<img src='gbooklogo.png' alt=''>
<a href='gbook/' target='_blank'>Гостевая книга</a><br>
<hr>
Рекомендуем:<br>
<img src='radiologo.jpg' alt=''>
<a href='http://radio.ho.ua'>Радио online</a><br>
<hr>
<a href='https://katstat.ru/in/1686' title='KatStat.ru - Топ рейтинг сайтов'><img src='https://katstat.ru/counter/big/1686' alt='KatStat.ru - Топ рейтинг сайтов'/></a><br>
©2021-$nowY
</body>
<script>
page = '$page';
Pages = '$Pages';
select = document.getElementsByTagName('select')[0];
if(Pages>1)
{
optArr=Array.from({length: Pages}, (v, k) => k+1);
optArr.splice(page-1, 1);
for(i in optArr)
{
opt = document.createElement('option');
opt.innerHTML = optArr[i];
select.appendChild(opt);
}
select.addEventListener("change", function (e){
window.location.href="?page="+e.target.value;
});
}
else
select.style.display="none";
</script>
</html>
HTML ;
?>
Удачи!
Vladimir Kheifets
Отправлено: 12 Августа, 2022 - 21:26:43 • Тема: Как разбить текстовый файл на страницы? • Форум: Напишите за меня, пожалуйста
Ответов: 22 Просмотров: 2908
Irina88 пишет: Vladimir Kheifets , Ваш скрипт работает. Но когда добавляю "шапку" и "ноги", выдает ERROR 500
Вот код страницы:
CODE (
htmlphp ):
скопировать код в буфер обмена
<? PHP
include "./settings.php" ;
$StartLine = 0 ;
$nLines = 10 ;
$title = "IPTV-плейлисты m3u" ;
function ReadLinesFromFile( $StartLine , $nLines , $file ) {
$EndLine = $StartLine + $nLines ;
$line = $StartLine ;
$news = [ ] ;
while ( $line < $EndLine ) {
$file -> seek ( $line - 1) ;
$news [ ] = $file -> current ( ) ;
$line ++;
}
return $news ;
}
echo <<< HTML
< html>
< head>
< meta name= 'description' content= 'IPTV-плейлисты m3u' >
< meta name= 'description' content= 'IPTV-плейлисты m3u Украина' >
< META NAME= 'TITLE' CONTENT= 'IPTV-плейлисты m3u Украина' > < META NAME= 'DESCRIPTION' CONTENT= 'IPTV-плейлисты m3u Украина.' >
< title> $title </ title>
</ head>
< body>
< img src= 'iptv.jpg' width= '100%' height= '300' alt= '' >< br>
HTML;
$file = new SplFileObject( 'enter.txt' ) ;
$file -> seek ( PHP_INT_MAX) ;
$linesTotal = $file -> key ( ) + 1 ;
$LineInPage = 10 ;
$Pages = ceil ( ( $linesTotal ) / $LineInPage ) ; $page = isset ( $_GET [ 'page' ] ) ?$_GET [ 'page' ] : 1 ;
$StartLine = ( $page - 1) * $LineInPage + 1 ;
$news = ReadLinesFromFile( $StartLine , $LineInPage , $file ) ;
foreach ( ( Array ) $news as $line ) echo "$line <br>" ; echo "<hr>" ;
$previewPage = $page - 1 ;
$nextPage = $page + 1 ;
if ( $previewPage > 0)
echo "<a href='?page=$previewPage '><<<</a> " ;
echo " <select></select> " ;
if ( $nextPage <= $Pages )
echo " <a href='?page=$nextPage '>>>></a>" ;
echo <<< HTML
</ body>
< script>
page = '$page' ;
Pages = '$Pages' ;
select = document. getElementsByTagName( 'select' ) [ 0] ;
if ( Pages> 1)
{
optArr= Array . from( { length: Pages} , ( v, k) => k+ 1) ; optArr. splice( page- 1, 1) ;
for ( i in optArr)
{
opt = document. createElement( 'option' ) ;
opt. innerHTML = optArr[ i] ;
select. appendChild( opt) ;
}
select. addEventListener( "change" , function ( e) {
window. location. href= "?page=" + e. target. value;
} ) ;
}
else
select. style. display= "none" ;
</ script>
< br>
< img src= 'iptvplayerlogo.png' alt= '' >& nbsp;
< a href= 'load.php' > СКАЧАТЬ IP- TV_player</ a>< br>
< img src= 'gbooklogo.png' alt= '' >& nbsp;
< a href= 'gbook/' target= '_blank' > Гостевая книга</ a>< br>
< hr>
Рекомендуем:< br>
< img src= 'radiologo.jpg' alt= '' >
< a href= 'http://radio.ho.ua' > Радио online</ a>< br>
< hr>
< a href= 'https://katstat.ru/in/1686' title= 'KatStat.ru - Топ рейтинг сайтов' >< img src= 'https://katstat.ru/counter/big/1686' alt= 'KatStat.ru - Топ рейтинг сайтов' /></ a>< br>
& copy; 2021- $today
</ html>
HTML;
?>
Ирина!
Вы уверены в том, что в PHP выдаются сообщения об ошибках?
На всякий случай вставьте в первой строке error_reporting(E_ALL);
В Вашем коде в 51 строке закрывается </body> , затем вставлен<script>....</script> и затем опять нтмл-тэги до </html> . это не правильно.
Ваша проблема не в смене версии PHP на сервере.
Vladimir Kheifets
Отправлено: 12 Августа, 2022 - 13:47:04 • Тема: Как разбить текстовый файл на страницы? • Форум: Напишите за меня, пожалуйста
Ответов: 22 Просмотров: 2908
Irina88 пишет: В связи с обновлением версии PHP на сервере ho.ua, перестал работать данный скрипт.
Помогите адаптировать его под PHP 8.0.
Добрый день!
Проверил на PHP 8.0. У меня работает.
Тестовый файл:Спойлер (Отобразить ) CODE (
htmlphp ):
скопировать код в буфер обмена
МОСКВА, 25 ноя — РИА Новости.
Изолированность и отсутствие широкого разнообразия штаммов способствовали
"самоликвидация" дельта- варианта коронавируса в Японии. Об этом в интервью "Ленте.ру" рассказала
профессор Школы системной биологии американского университета Джорджа Мейсона, главный
научный сотрудник лаборатории функциональной геномики медико- генетического научного центра РАН Анча Баранова.
Баранова также отметила, что исчезновению коронавируса в Японии способствовала не только относительная
изолированность страны в отличие от Европы, но и дисциплинированное отношение граждан к ограничительным мерам.
Вместе с тем генетик считает опасным исчезновение дельта- штамма коронавируса в России по примеру Японии.
Она объяснила это его высоким уровнем инфекционности, которая позволяет сдерживать распространения
других вариантов вируса.
Ранее руководитель команды ученых из Национального института генетики и Университета Ниигаты,
профессор Ицуро Иноуэ сообщил, что циркулирующий в Японии дельта- штамм коронавируса мог накопить
слишком много мутаций в одном из неструктурных белков, что впоследствии могло лишить его способности
"исправляться" и вызвало "самоликвидацию" .
Исследователь отметил, что в начале появления варианта дельта в Японии мутации
в нем быстро накапливались, однако затем прекратились. По его словам, большая часть изменений
происходила на участке A394V неструктурного белка nsp14, отвечающего за исправление ошибок
при репликации. В итоге вирус, пытаясь исправить дефекты, потерял способность размножаться.
СкриптСпойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
//include "./settings.php";
$StartLine = 0 ;
$nLines = 10 ;
$title = $_SERVER [ 'SERVER_NAME' ] ;
function ReadLinesFromFile( $StartLine , $nLines , $file ) {
$EndLine = $StartLine + $nLines ;
$line = $StartLine ;
$news = [ ] ;
while ( $line < $EndLine ) {
$file -> seek ( $line - 1) ;
$news [ ] = $file -> current ( ) ;
$line ++;
}
return $news ;
}
echo <<< HTML
< html>
< head>
< title> $title </ title>
</ head>
< body>
HTML;
$file = new SplFileObject( 'News.txt' ) ;
$file -> seek ( PHP_INT_MAX) ;
$linesTotal = $file -> key ( ) + 1 ;
$LineInPage = 10 ;
$Pages = ceil ( ( $linesTotal ) / $LineInPage ) ; $page = isset ( $_GET [ 'page' ] ) ?
$_GET [ 'page' ] : 1 ;
$StartLine = ( $page - 1) * $LineInPage + 1 ;
$news = ReadLinesFromFile( $StartLine , $LineInPage , $file ) ;
foreach ( ( Array ) $news as $line ) echo "$line <br>" ; echo "<hr>" ;
$previewPage = $page - 1 ;
$nextPage = $page + 1 ;
if ( $previewPage > 0)
echo "<a href='?page=$previewPage '><<<</a> " ;
echo " <select></select> " ;
if ( $nextPage <= $Pages )
echo " <a href='?page=$nextPage '>>>></a>" ;
echo <<< HTML
</ body>
< script>
page = '$page' ;
Pages = '$Pages' ;
select = document. getElementsByTagName( 'select' ) [ 0] ;
if ( Pages> 1)
{
optArr
= Array . from
( { length
: Pages
} , ( v
, k
) => k
+ 1
) ; optArr. splice( page- 1, 1) ;
for ( i in optArr)
{
opt = document. createElement( 'option' ) ;
opt. innerHTML = optArr[ i] ;
select. appendChild( opt) ;
}
select. addEventListener( "change" , function ( e) {
window. location. href= "?page=" + e. target. value;
} ) ;
}
else
select. style. display= "none" ;
</script>
</ html>
HTML;
?>
Покажите, пожалуйста, что не работает - сообщение об ошибке.
Удачи!
Vladimir Kheifets
Отправлено: 03 Августа, 2022 - 16:30:37 • Тема: Редактор MySQL таблиц • Форум: Вопросы новичков
Ответов: 1 Просмотров: 1199
mistik77777 пишет: Здравствуйте Гуру PHP. очень надеюсь на вашу помощь, ситуация следующая, есть Редактор MySQL таблиц и две таблицы (код ниже), по отдельности они в нем редактируются без ошибок, но когда я хочу их объеденить в один редактор то редактируется только первая таблица, при редактировании второй появляется ошибка - ERROR: Failed to find specified row in database, помогите решить данную проблему, благодарю за ваши ответы.
CODE (
htmlphp ):
скопировать код в буфер обмена
<? php
require_once ( 'TableEditor.php' ) ;
header ( 'Access-Control-Allow-Origin: *' ) ;
/////начало первой таблицы//////////
$editor = new TableEditor( $db , 'products_setting' ) ;
$editor -> setConfig ( 'perPage' , 50) ;
$editor -> setDisplayNames ( array ( 'disabled' => 'Отключить голосование' , ) ) ; $editor -> display ( ) ;
////конец первой и начало второй таблицы////
$editor = new TableEditor( $db , 'products' ) ;
$editor -> setConfig ( 'perPage' , 50) ;
$editor -> setDisplayNames ( array ( 'Name' => 'Имя' ,
'num' => '№ песни' ,
'song' => 'название песни'
) ) ;
$editor -> display ( ) ;
?>
Добрый день!
Про таблицы нельзя ничего сказать не посмотрев TableEditor.php ,
а в строке ниже ошибка or die(mysql_error()) т.к. mysqli_connect с mysql функциями не работает.
д.б.
Удачи!
Vladimir Kheifets
Отправлено: 09 Июня, 2022 - 06:48:09 • Тема: Как реализовать метод array_flip иным способом • Форум: Вопросы новичков
Ответов: 3 Просмотров: 952
Строитель пишет: Автору топика скорее всего нужно написать "свой" array_flip(). То есть, написать пользовательскую функцию, выполняющую то же, что и array_flip(), но без его использования.
Добрый день!
Возможно Вы правы.Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
function myArrayFlip( $inArr ) {
{
$outArr = [ ] ;
foreach ( $inArr as $key => $value ) $outArr [ $value ] = $key ;
return $outArr ;
}
return 0 ;
}
echo "<pre>" ;
$arr = [ 0 => "a" , 1 => "b" , 2 => "c" ] ;
$arr = myArrayFlip( $arr ) ;
$arr = myArrayFlip( $arr ) ;
/*
Array
(
[a] => 0
[b] => 1
[c] => 2
)
Array
(
[0] => a
[1] => b
[2] => c
)
*/
Возможно и другое толкование: нужно реализовать класс с методом array_flip ...
Тогда можно сделать так:Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
class myClass{
{
$outArr = [ ] ;
foreach ( $inArr as $key => $value ) $outArr [ $value ] = $key ;
return $outArr ;
}
return 0 ;
}
}
echo "<pre>" ;
$arr = [ 0 => "a" , 1 => "b" , 2 => "c" ] ;
/*
Array
(
[a] => 0
[b] => 1
[c] => 2
)
Array
(
[0] => a
[1] => b
[2] => c
)
*/
Vladimir Kheifets
Отправлено: 31 Мая, 2022 - 13:59:16 • Тема: Требуется php программист • Форум: Работа
Ответов: 2 Просмотров: 2344
Misha23 пишет: Хенаро пишет: Здравствуйте) Занимаюсь веб-программированием 5 лет. Как раз ищу работу. Умею создавать сайты с нуля и писать нужные скрипты. В телеграмм вас что-то не находит. Пишите мне https://t.me/harekrishnaradherama
Еще актуально?
Судя по тому, что мне ничего не ответили после публикации объявлению, это не было актуально уже тогда.
Здесь обсуждалась тема : "Обязан ли работодатель отвечать на заявление?"
https://www.finanzfrage.net/g/frage/ist-man-als-arbeitgeber-verpflichtet-auf-eine-bewerbung-zu-antwortenЦитата: Работодатель должен иметь порядочность
1. подтверждать получение заявления заявителя
2. уведомлять заявителя, если он/она не был принят.
Vladimir Kheifets
Отправлено: 29 Мая, 2022 - 10:42:27 • Тема: Циклы для вывода в таблицу • Форум: Хранение данных, их вывод и обработка
Ответов: 3 Просмотров: 1869
Thomas_Bergersen пишет: Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
if ( isset ( $_POST [ 'name' ] ) && isset ( $_POST [ 'surename' ] ) && isset ( $_POST [ 'age' ] ) && isset ( $_POST [ 'nationality' ] ) && isset ( $_POST [ 'university' ] ) && isset ( $_POST [ 'kurs' ] ) && isset ( $_POST [ 'group' ] ) && ( isset ( $_POST [ 'birinshi_san' ] ) && isset ( $_POST [ 'ekinshi_san' ] ) ) && ( isset ( $_POST [ 'email' ] ) && isset ( $_POST [ 'password' ] ) ) ) { $name = $_POST [ 'name' ] ;
$surename = $_POST [ 'surename' ] ;
$age = $_POST [ 'age' ] ;
$nationality = $_POST [ 'nationality' ] ;
$university = $_POST [ 'university' ] ;
$kurs = $_POST [ 'kurs' ] ;
$group = $_POST [ 'group' ] ;
$plus = ( int) $_POST [ 'birinshi_san' ] + ( int) $_POST [ 'ekinshi_san' ] ;
$minus = ( int) $_POST [ 'birinshi_san' ] - ( int) $_POST [ 'ekinshi_san' ] ;
$proiz = ( int) $_POST [ 'birinshi_san' ] * ( int) $_POST [ 'ekinshi_san' ] ;
$div = ( int) $_POST [ 'birinshi_san' ] / ( int) $_POST [ 'ekinshi_san' ] ;
$email = $_POST [ 'email' ] ;
$password = $_POST [ 'password' ] ;
$tel = $_POST [ 'tel' ] ;
$name = $_POST [ 'name' ] ;
$dob = $_POST [ 'dob' ] ;
require 'natizhe.php' ;
}
Добрый день!
Код, который Вы показали совсем не по теме "Вывод html таблицы расписания приёмных часов".
Однако, раз уж Вы его опубликовали, обратите внимание на следущее:
1. Нет необходимости применять функцию isset ко всем POST переменным.
2. Если необходимо применить (int) к $_POST['birinshi_san'] и $_POST['ekinshi_san'],
то лучше было бы вычислить значения integer один раз, а потом их использовать в расчетах $plus, $minus, $proiz, $div
3. Для вычисления интервала между двумя датами, в вашем случае возраста $age, лучше применять методы diff и format класса DateTime
4. Ваш код можно записать так:Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?
if ( isset ( $_POST [ 'name' ] ) { foreach ( $_POST as $key => $value )
$$key = ( strpos ( $key , "_san" ) === false ) ?
$value : ( int
) $value ; $plus = $birinshi_san + $ekinshi_san ;
$minus = $birinshi_san - $ekinshi_san ;
$proiz = $birinshi_san * $ekinshi_san ;
$div = $birinshi_san / $ekinshi_san ;
$currentDateTime = new DateTime( ) ;
$birthDayDateTime = new DateTime( $dob ) ;
$age = $currentDateTime -> diff ( $birthDayDateTime ) -> format ( "%y" ) ;
require 'natizhe.php' ;
}
?>
Удачи!
Vladimir Kheifets
Отправлено: 27 Мая, 2022 - 13:04:50 • Тема: Все ли буквы в строке - прописные? • Форум: Регулярные выражения
Ответов: 4 Просмотров: 1659
Хенаро пишет:
Попробуй так)
Добрый день!
Видимо Вы не обратили внимание на то, что ответили на вопрос от 09 Декабря, 2021
Может и правильно. Форум что-то затих...
Попробуйте такPHP:
скопировать код в буфер обмена
function checkUperCaseStr( $str , $maxUperCaseCh ) {
if ( preg_match ( '/^\p{Lu}+$/u' , $str ) ) //в строке только прописные буквы return 1 ;
else
{
$kUperCaseCh = count ( $matches [ 0
] ) ; //кол-во прописных букв //кол-во прописных букв не больше $maxUperCaseCh и есть цыфры или строчные буквы
if ( $kUperCaseCh <= $maxUperCaseCh AND
preg_match ( '/(\d|\p{Ll})/u' , $str ) ) return 0 ;
else
return 2 ;
}
}
$TestStr = [
"MЬNCHEN" , //здесь U-умляут, не Ь
"Октоберфест в Мюнхене" ,
"МОСКВА" ,
"Москва" ,
"СРЕДА 25 мая" ,
"СРЕДА 25 Mая" ,
"1 мая" ,
"FREITAG 27.05.2022"
] ;
$maxUperCaseCh = 5 ;
foreach ( $TestStr as $str )
{
echo "$str : " . checkUperCaseStr( $str , $maxUperCaseCh ) . "<br>" ;
}
/*
MЬNCHEN : 1
Октобефест в Мюнхене : 0
МОСКВА : 1
Москва : 0
СРЕДА 25 мая : 0
СРЕДА 25 Mая : 2
1 мая : 0
FREITAG 27.05.2022 : 2
*/
?>
Удачи!
Vladimir Kheifets
Отправлено: 26 Мая, 2022 - 10:39:21 • Тема: Точка пересечения отрезка и прямой • Форум: Напишите за меня, пожалуйста
Ответов: 3 Просмотров: 1290
Thomas Bergersen пишет: ht.tps://habr.com/ru/post/523440./ почитай эту статью
Добрый день!
Посмотри демо: https://www[dot]alto-booking[dot]com/dev[dot][dot][dot]rosspoint/?la=ru
Обрати внимание на то, что есть возможность итерактивно задавать отрезки и результат расчёта отображается на графике.
Исходной код открытый. Если есть желание, погугли и замени методы расчета и убедись в их работоспособности.
Я проверял. К сожалению, многие из опубликованных методов при визуализации показывают неверно местоположение точки пересечения.
Посмотри исходный HTML кодСпойлер (Отобразить ) CODE (
html ):
скопировать код в буфер обмена
<!--
Demo site index.html
CrossPoin CompactDOM script & CrossPoin PHP script
Version: 1.0
Author: Vladimir Kheifets (kheifets.vladimir@online.de)
Copyright ©2022 Vladimir Kheifets All Rights Reserved
Online-tutorial of the Java Script Library CompactDOM:
https://www.alto-booking.com/developer/CompactDOM/
CompactDOM on GitHub:
https://github.com/VladimirKheifets/Java-Script-library-CompactDOM
-->
<!DOCTYPE html>
<html >
<head >
<script type = "text/javascript" src = "CompactDOM.min.js" ></ script >
<script type = "text/javascript" src = "index.js" ></ script >
</ head >
<body >
<header>
<h1 ></ h1 >
<div >
<input ><label ></ label >
<input ><label ></ label >
<span id = "a1" ></ span >
<span id = "b1" ></ span >
</ div >
<div >
<input ><label ></ label >
<input ><label ></ label >
<span id = "a2" ></ span >
<span id = "b2" ></ span >
</ div >
</ header>
<main></ main>
</ body >
</ html >
и код CompactDOM скриптаСпойлер (Отобразить ) CODE (
javascript ):
скопировать код в буфер обмена
/*
Cross Point
CompactDOM script
Version: 1.0, 2022-05-19
Author: Vladimir Kheifets (kheifets.vladimir@online.de)
Copyright ©2022 Vladimir Kheifets All Rights Reserved
Online-tutorial of the Java Script Library CompactDOM:
https://www.alto-booking.com/developer/CompactDOM/
CompactDOM on GitHub:
https://github.com/VladimirKheifets/Java-Script-library-CompactDOM
*/
__.laSelector ( "en" ) ;
dic = __.getDictionary ( _dirLa) ;
//---------------------------------
__.ready ( ( ) = > {
Env = __.env ( ) ;
__.on ( Env.eor , ev = > { __.reload ( ) ; } ) ;
//------------------------------------------------
head = _( "head" ) ;
title = dic.title ;
head.create ( title, { tag: "title" } ) ;
head.create ( 1 , { tag: "meta" , charset: "utf-8" } ) ;
head.create ( 1 ,
{
tag: "meta" ,
name : "viewport" ,
content: "width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, user-scalable=0"
} ) ;
__.link ( "css/index.css,css/modal.css,css/button_to_up.css,css/selLanguages.css" ) ;
ctx = [ ] ;
lay = [ ] ;
lines = { } ;
inp = _( "input" ) ;
lab = _( "label" ) ;
//------------------------------------------------
colors = { 1 : "blue" , 2 : "purple" , 3 : "red" } ;
canvasWidthD = [ 300, 500, 500, 600, 860] ;
canvasHeightD = [ 300, 300, 300, 400, 400] ;
Env = __.env ( ) ;
canvasWidth = canvasWidthD[ Env.dev ] ;
canvasHeight = canvasHeightD[ Env.dev ] ;
gridCell = 10 ;
X0 = canvasWidth/ 2 - 1 ;
Y0 = canvasHeight/ 2 - 1 ;
main = _( "main" ) ;
mainCanvasSt = "width:" + canvasWidth+ "px;height:" + canvasHeight+ "px"
main.css ( mainCanvasSt) ;
_( "header h1" ) .content ( title) ;
//-- canvas -------------------------------------------------------
main.create ( 3 ,
{
tag: "canvas" ,
id: "lay" ,
width: canvasWidth,
height: canvasHeight,
style: mainCanvasSt
} ) ;
elCanvas = _( "canvas" ) ;
//---LINE div --------------------------------------
_( "header div" ) .each ( ( el, ind) = > {
i = ind + 1 ;
el.css ( "color:" + colors[ i] ) ;
el.attr ( "id" , "dL" + i) ;
} ) ;
labContent= dic.switch .concat ( dic.switch ) ;
_( "label" ) .each ( ( el, ind) = > { el.content ( labContent[ ind] ) } ) ;
//-- footer -------------------------------------------------------
d = new Date( ) ;
year = d.getFullYear ( ) ;
footer = "<p>© </p>" + year + " Alto Booking"
footerSt= "margin-top:" + ( canvasHeight+ 20 ) + "px" ;
main.create ( footer, { add: "after" , tag: "footer" } ) ; //, style:footerSt
//------------------------------------------------------------------
nav = __.create ( 1 , { tag: "nav" } ) ;
nav.create (
dic.button ,
{
tag: "button" ,
id: "but"
}
) ;
navCSS = "top:" + ( _( "header" ) .position ( ) .top + 10 ) + "px" ;
nav.css ( navCSS) ;
navHide = ( ) = > { if ( Env.dev < 3) nav.hide ( ) ; } ;
res = __.create ( 1 , { tag: "p" } ) ;
res.css ( "height:55px" ) ;
res.hide ( 100) ;
if ( Env.dev < 3 )
{
menu = main.create ( 1 , { add: "after" , tag: "div" , id: "menu" } ) ;
fileName= ( Env.tou ? "menuts" : "menu" ) + ".html" ;
menu.include ( fileName) ;
nav.hide ( ) ;
res.css ( navCSS) ;
menu.click ( ( ) = > {
if ( nav.ishide ( ) )
nav.show ( ) ;
else
nav.hide ( ) ;
if ( ! res.ishide ( ) )
res.hide ( 100) ;
} ) ;
}
i= 1 ;
while ( i< 3 )
{
aI = "a" + i;
bI = "b" + i;
lines[ aI] = _( "#" + aI) ;
lines[ bI] = _( "#" + bI) ;
_( "#dL" + i + " input" ) .each ( ( el, ind) = > {
el.attr (
{
"type" : "radio" ,
"id" : "inp" + i,
"name" : "inp" + i,
"value" : ind+ 1
}
) ;
} ) ;
i++;
}
// Defining canvas & layots
elCanvas.each ( ( el, ind) = > {
ctx[ ind] = el.d .getContext ( '2d' ) ;
lay[ ind] = el;
el.css ( "z-index:" + ind) ;
} ) ;
startSetting = ( ) = > {
pXY = {
width: canvasWidth,
height: canvasHeight,
1: { line: { } } ,
2: { line: { } }
} ;
activesPoint = { 1 : "a" , 2 : "a" } ;
Drawing = { 1: true , 2: true } ;
lay[ 2] .hide ( ) ;
_( "span" ) .each ( ( el) = > { el.content ( "" ) } ) ;
but = [ ] ;
_( "button" ) .each ( ( el, ind) = > {
but[ ind] = el;
if ( ind> 1) el.hide ( ) ;
} ) ;
inp.each ( ( el, ind) = > {
if ( ind == 0 || ind == 2) el.checked ( 2) ;
el.css ( "opacity:0" ) ;
} ) ;
lab.each ( ( el, ind) = > {
if ( ind == 1 || ind == 3 ) el.css ( "opacity:0" ) ;
} ) ;
res.css ( "opacity:0" ) ;
} ;
showLineSelector = ( iL) = > {
inpEl = { 1: [ 0, 1] , 2: [ 2, 3] } ;
labEl = { 1: [ 1] , 2: [ 3] } ;
inp.each ( ( el, ind) = > {
if ( inpEl[ iL] .includes ( ind) )
el.css ( "opacity:1" ) ;
} ) ;
lab.each ( ( el, ind) = > {
if ( labEl[ iL] .includes ( ind) )
el.css ( "opacity:1" ) ;
} ) ;
}
drawingGrid = ( cansasW, cansasH, sizeCell, c, color) = > {
c.strokeStyle = "#ddd" ;
for ( var x = sizeCell; x < cansasW; x += sizeCell) {
c.moveTo ( x, 0) ;
c.lineTo ( x, cansasH) ;
}
for ( var y = sizeCell; y < cansasH; y += sizeCell) {
c.moveTo ( 0, y) ;
c.lineTo ( cansasW, y) ;
}
c.stroke ( ) ;
}
drawingAxes = ( cansasW, cansasH, c, color) = > {
// Drawing axes, Decart 0 in canvas x=399, y=198
// Axis X
x1X = 10 ;
y1X = cansasH/ 2 ;
x2X = cansasW - 20 ;
y2X = y1X;
drawingLine( c, x1X, y1X, x2X, y2X, color) ;
drawingLine( c, x2X- 10, y2X+ 5, x2X, y2X, color) ;
drawingLine( c, x2X- 10, y2X- 5, x2X, y2X, color) ;
drawingText( c, 'X' , x2X+ 2, y2X+ 7, color) ;
// Axis Y
x1Y = cansasW/ 2 ;
y1Y = x1X+ 10 ;
x2Y = x1Y;
y2Y = cansasH - 10 ;
drawingLine( c, x1Y, y1Y, x2Y, y2Y, color) ;
drawingLine( c, x2Y+ 5, y1Y+ 10, x1Y, y1Y, color) ;
drawingLine( c, x2Y- 5, y1Y+ 10, x1Y, y1Y, color) ;
drawingText( c, 'Y' , x1Y- 6, y1Y- 3, color) ;
}
drawingLine = ( c, x1, y1, x2, y2, color ) = > {
c.beginPath ( ) ;
c.strokeStyle = color;
c.moveTo ( x1, y1) ;
c.lineTo ( x2, y2) ;
c.closePath ( ) ;
c.stroke ( ) ;
} ;
drawingPoint = ( c, x, y, color ) = > {
c.beginPath ( ) ;
c.fillStyle = color;
c.arc ( x, y, 3, 0, 2 * Math.PI ) ;
c.fill ( ) ;
c.closePath ( ) ;
c.stroke ( ) ;
} ;
drawingText = ( c, text, x, y, color, font ) = > {
if ( __.u ( font) ) font = '16px arial'
c.beginPath ( ) ;
c.fillStyle = color;
c.font = font;
c.fillText ( text, x, y) ;
c.fill ( ) ;
c.closePath ( ) ;
c.stroke ( ) ;
} ;
clearCanvas = ( c) = > { c.clearRect ( 0, 0, canvasWidth, canvasHeight) } ;
butShowHide = ( s) = > {
i = 2 ;
while ( i< but.length )
{
if ( s)
but[ i] .show ( ) ;
else
but[ i] .hide ( ) ;
i++;
}
} ;
ePoint = ( e) = > {
id = e.target .id ;
ind = parseInt( id.substr ( 3) ) - 1 ;
x = e.offsetX ;
y = e.offsetY ;
Xd = x - X0;
Yd = Y0 - y;
} ;
getlineABC = ( XY) = > {
if ( __.a ( XY) )
{
x1 = XY[ 0] ;
y1 = XY[ 1] ;
x2 = XY[ 2] ;
y2 = XY[ 3] ;
}
else
{
x1 = XY[ "Xad" ] ;
y1 = XY[ "Yad" ] ;
x2 = XY[ "Xbd" ] ;
y2 = XY[ "Ybd" ] ;
}
A = y2 - y1;
B = x1 - x2;
C = - x1* y2 + y1* x2;
return [ A, B, C] ;
} ;
crossPoint = ( ABC1, ABC2) = > {
A1 = ABC1[ 0] ;
B1 = ABC1[ 1] ;
C1 = ABC1[ 2] ;
A2 = ABC2[ 0] ;
B2 = ABC2[ 1] ;
C2 = ABC2[ 2] ;
Xcd = Math.round ( ( B1* C2 - B2* C1) / ( A2* B2 - A2* B1) ) ;
Ycd = Math.round ( ( A1* C2 - A2* C1) / ( A2* B1 - A1* B2) ) ;
Xc = Xcd + X0;
Yc = Y0 - Ycd;
return [ Xc, Yc, Xcd, Ycd] ;
} ;
crossPointK = ( XY1, XY2, X0, Y0 ) = > {
x1 = XY1[ "Xad" ] ;
y1 = XY1[ "Yad" ] ;
x2 = XY1[ "Xbd" ] ;
y2 = XY1[ "Ybd" ] ;
x3 = XY2[ "Xad" ] ;
y3 = XY2[ "Yad" ] ;
x4 = XY2[ "Xbd" ] ;
y4 = XY2[ "Ybd" ] ;
//-----------------------------------
z1 = ( x3- x1) * ( y2- y1) - ( y3- y1) * ( x2- x1) ;
z2 = ( x4- x1) * ( y2- y1) - ( y4- y1) * ( x2- x1) ;
z3 = ( x1- x3) * ( y4- y3) - ( y1- y3) * ( x4- x3) ;
z4 = ( x2- x3) * ( y4- y3) - ( y2- y3) * ( x4- x3) ;
crossPointCheck = ( z3* z4> 0 || z1* z2> 0) ? false : true ;
//-----------------------------------
if ( crossPointCheck)
{
k1 = ( y1 - y2) / ( x1 - x2) ;
b1 = y2 - k1 * x2;
k2 = ( y3 - y4) / ( x3 - x4) ;
b2 = y4 - k2 * x4;
Xd = Math.round ( ( b2 - b1) / ( k1 - k2) ) ;
Yd = Math.round ( k1* Xd + b1) ;
X = Xd + X0;
Y = Y0 - Yd;
return {
crossPointCheck: true ,
X: X,
Y: Y,
Xd: Xd,
Yd: Yd
} ;
}
else
return {
crossPointCheck: false
} ;
} ;
elCanvas.on ( 'click' , ( e) = > { //mouseclick or touchstart
navHide( ) ;
ePoint( e) ;
if ( Drawing[ ind] )
{
drawingPoint( ctx[ ind] , x, y, colors[ ind] ) ;
if ( activesPoint[ ind] === "a" )
{
activesPoint[ ind] = "b" ;
pXY[ ind] [ "Xa" ] = x;
pXY[ ind] [ "Ya" ] = y;
pXY[ ind] [ "Xad" ] = Xd;
pXY[ ind] [ "Yad" ] = Yd;
}
else
{
pXY[ ind] [ "Xb" ] = x;
pXY[ ind] [ "Yb" ] = y;
pXY[ ind] [ "Xbd" ] = Xd;
pXY[ ind] [ "Ybd" ] = Yd;
drawingLine( ctx[ ind] , pXY[ ind] [ "Xa" ] , pXY[ ind] [ "Ya" ] , x, y, colors[ ind] ) ;
lay[ 2] .show ( ) ;
Drawing[ ind] = false ;
if ( ind == 2)
{
butShowHide( 1) ;
showLineSelector( 1) ;
showLineSelector( 2) ;
}
}
}
} ) ;
elCanvas.on ( 'mousemove' , ( e) = > {
navHide( ) ;
ePoint( e) ;
if ( Drawing[ ind] )
{
ab = activesPoint[ ind] ;
if ( ab === "b" )
{
clearCanvas( ctx[ ind] ) ;
drawingPoint( ctx[ ind] , pXY[ ind] [ "Xa" ] , pXY[ ind] [ "Ya" ] , colors[ ind] ) ;
drawingLine( ctx[ ind] , pXY[ ind] [ "Xa" ] , pXY[ ind] [ "Ya" ] , x, y, colors[ ind] ) ;
contP = dic.points [ 1 ] + ": " ;
}
else
contP = " " + dic.points [ 0 ] + ": " ;
lines[ ab+ ind] .content ( contP + "x = " + Xd+ ", y = " + Yd) ;
}
} ) ;
inp.change ( ( e) = > {
el = e.target ;
id = _( el) .attr ( "id" ) ;
i = id.substr ( 3) ;
if ( activesPoint[ i] === "b" )
{
val = parseInt( _( el) .val ( ) ) ;
if ( val === 2)
{
ABC1 = getlineABC( pXY[ i] ) ;
cHalbW = canvasWidth/ 2 ;
cHalbH = canvasHeight/ 2 ;
ABC2a = getlineABC( [ - cHalbW, - cHalbH, - cHalbW, cHalbH] ) ;
ABC2b = getlineABC( [ cHalbW, - cHalbH, cHalbW, cHalbH] ) ;
XYca = crossPoint( ABC1, ABC2a) ;
XYcb = crossPoint( ABC1, ABC2b) ;
drawingLine( ctx[ i] , XYca[ 0] , XYca[ 1] , XYcb[ 0] , XYcb[ 1] , colors[ i] ) ;
pXY[ i] [ "line" ] = {
Xa: XYca[ 0] ,
Ya: XYca[ 1] ,
Xad: XYca[ 2] ,
Yad: XYca[ 3] ,
Xb: XYcb[ 0] ,
Yb: XYcb[ 1] ,
Xbd: XYcb[ 2] ,
Ybd: XYcb[ 3]
} ;
}
else
{
clearCanvas( ctx[ i] ) ;
drawingPoint( ctx[ i] , pXY[ i] [ "Xa" ] , pXY[ i] [ "Ya" ] , colors[ i] ) ;
drawingLine( ctx[ i] , pXY[ i] [ "Xa" ] , pXY[ i] [ "Ya" ] , pXY[ i] [ "Xb" ] , pXY[ i] [ "Yb" ] , colors[ i] ) ;
drawingPoint( ctx[ i] , pXY[ i] [ "Xb" ] , pXY[ i] [ "Yb" ] , colors[ i] ) ;
delete pXY[ i] .line ;
}
}
} ) ;
showResult = ( XYcp, code) = > {
if ( __.u ( code) ) code= "PHP" ;
res.show ( 1) ;
if ( XYcp[ "crossPointCheck" ] )
{
drawingPoint( ctx[ 2 ] , XYcp[ "X" ] , XYcp[ "Y" ] , colors[ 3] ) ;
out = "Crossing point found.<br>" ;
out += "Coordinates " ;
out += "X: " + XYcp[ "Xd" ] + ", Y: " + XYcp[ "Yd" ] ;
out += "<br>calculated with " + code;
res.content ( out) ;
}
else
{
out = "Crossing point not found!<br>" ;
out += "Please click the \" clear\" <br>button and try again." ;
res.content ( out) ;
}
} ;
printInfo = ( rsp) = > {
txt= dic.structure ;
var out = "<div>" ;
if ( rsp)
{
out += txt[ 0] ;
}
out += txt[ 1] ;
if ( rsp)
{
out += txt[ 2] ;
}
out += "</div>" ;
return out;
} ;
_( "button" ) .click ( ( e) = > {
id = e.target .id ;
i = parseInt( id.substr ( 3) ) ;
switch ( i)
{
case 1 :
obj=
{
url: _dirLa+ "/help.html" ,
method: "get" ,
func: ( rsp) = > {
__.modal ( rsp) ;
} ,
debug: 1
}
__.send ( obj) ;
break ;
case 2:
clearCanvas( ctx[ 0] ) ;
if ( gridOn)
{
gridOn = false
drawingAxes( canvasWidth, canvasHeight, ctx[ 0 ] , "#aaa" ) ;
}
else
{
gridOn = true ;
drawingGrid( canvasWidth, canvasHeight, 10 , ctx[ 0 ] , "#ddd" ) ;
drawingAxes( canvasWidth, canvasHeight, ctx[ 0 ] , "#aaa" ) ;
}
break ;
case 3:
XY1 = ( pXY[ 1] .line .Xa ) ? pXY[ 1] .line : pXY[ 1] ;
XY2 = ( pXY[ 2] .line .Xb ) ? pXY[ 2] .line : pXY[ 2] ;
XYcp = crossPointK( XY1, XY2, X0, Y0 ) ;
showResult( XYcp, "Java Script" ) ;
console.log ( XYcp) ;
break ;
case 4 :
obj=
{
url: "crossPoint.php" ,
method: "post" ,
dataType: "json" ,
responseType: "json" ,
data: pXY,
func: showResult
}
__.send ( obj) ;
break ;
case 5 :
obj=
{
url: "crossPoint.php?pr=1" ,
method: "post" ,
dataType: "json" ,
data: pXY,
func: ( rsp) = > {
out = "<div class = 'outPr'>" ;
out += rsp;
out += printInfo( true ) ;
out += "</div>" ;
__.modal ( out) ;
}
}
__.send ( obj) ;
break ;
case 6 :
obj=
{
url: "crossPoint.php?pr=2" ,
method: "post" ,
dataType: "json" ,
data: pXY,
func: ( rsp) = > {
out = "<div class = 'outPr'>" ;
out += rsp;
out += printInfo( ) ;
out += "</div>" ;
__.modal ( out) ;
}
}
__.send ( obj) ;
break ;
case 7:
clearCanvas( ctx[ 1] ) ;
clearCanvas( ctx[ 2] ) ;
startSetting( ) ;
break ;
}
navHide( ) ;
} ) ;
//----------------------------------------------
gridOn = true ;
drawingGrid( canvasWidth, canvasHeight, gridCell, ctx[ 0 ] , "#ddd" ) ;
drawingAxes( canvasWidth, canvasHeight, ctx[ 0 ] , "#aaa" ) ;
startSetting( ) ;
__.modal ( ) ;
__.scroll ( ) ;
__.laSelector ( ) ;
} ) ;
Удачи!
Vladimir Kheifets
Отправлено: 24 Мая, 2022 - 07:11:01 • Тема: Сохраняет в XML файл одной строкой • Форум: Вопросы новичков
Ответов: 2 Просмотров: 364
Хенаро пишет: Здравствуйте, не могу никак решить проблему. Сделал регистрацию и авторизацию с сохранением данных в XML файл. Искал в гугле два часа как красиво сохранять в XML, так и не получилось у меня это сделать, так что вся надежда на добрую душу которая поможет
PHP:
скопировать код в буфер обмена
$users = $file -> user ;
foreach ( $users as $user ) {
$tellog = $user -> tellog [ 0] ;
if ( $tellog == $tellog1 ) {
exit ( "Такой пользователь уже зарегистрирован" ) ; }
}
$user = $file -> addChild ( 'user' ) ;
$user -> addChild ( 'tellog' , $tellog1 ) ;
$user -> addChild ( 'name' , $name ) ;
$user -> addChild ( 'pass' , $pass ) ;
$file -> saveXML ( "users.xml" ) ;
exit ( "Вы успешно зарегистрировались!" ) ;
Добрый день!
См. "PHP simpleXML, как сохранить файл в отформатированном виде?"
на https://overcoder[dot]net/
Советую Вам подумать о том, что может лучше сохранять данные не в файле "users.xml", а таблице "users" БД.
Удачи!
Vladimir Kheifets
Отправлено: 22 Мая, 2022 - 13:58:15 • Тема: Обращение к методам из другого класса • Форум: Объектно-ориентированное программирование
Ответов: 1 Просмотров: 1428
yuqxye пишет: Здравствуйте форумчане!
Есть метод в классе A, в котором исходя из значения в переменных нужно обращаться к методам других классах из других файлов. Например
Есть файл classa.php
PHP:
скопировать код в буфер обмена
<?PHP
require 'classb.php' ;
require 'classc.php' ;
class classa
{
public function index( )
{
# значения этих переменных может меняться, поэтому обращаться нужно к любому классу и любому методу из этих классов
$class = 'classb' ;
$peremen = 'methodB' ;
// ЗДЕСЬ ДОЛЖЕН БЫТЬ ОТВЕТ НА МОЙ ВОПРОС - КАК ОБРАЩАТЬСЯ К НУЖНОМУ МЕТОДУ В НУЖНОМ КЛАССЕ?
}
}
Есть файл classb.php
И допустим, есть такой же файл classc - (3 файл) с любым методом...
1) Как мне обращаться к этим методам в других классах?
2) Важно то, что переменные $class и $peremen задают названия нужного класса и метода
Возможно нужна АВТОЗАГРУЗКА и сделать СТАТИЧЕСКИЕ методы, чтобы обращаться к таким? Но пока я сделал через require загрузку файлов с классами, для налядности. Но хочу узнать от вас грамотное решение. Я давно не программировал, поэтому в голове есть некоторые воспоминания и догадки, но не могу найти правильного ответа, как это делать правильно.
Добрый день!
М.б. примерно так:Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?
class A
{
public static function multiply( $n1 , $n2 ) {
return $n1 * $n2 ;
}
}
class B
{
public function сalculate( $n1 , $n2 )
{
$res = A:: multiply ( $n1 , $n2 ) ;
echo " $n1 x $n2 = " . $res ;
}
}
$b = new B;
$b -> сalculate( 5, 5) ;
/*
Результат:
5 x 5 = 25
*/
?>
Удачи!
Страниц (59): « 1 2 [3] 4 5 6 7 8 9 ... » В конец
Powered by ExBB FM 1.0 RC1. InvisionExBB