как вырезать строку до определенного символа?

Fox12

Новичок
А, вот, на счет кода полностью согласен! )
$psti - текстовая переменная, например, такая (со всеми абзацами и хэштегами, как есть):
"Низкая цена в роуминге по всему миру. Работает в России.

Также есть возможность инвестирования и получения прибыли, тоже от 10 Евро.

|#евро@firma_net #операторы@firma_net #связь #использование #миру #мире #додвери #инвестирование #пользователи #сотоваясвязь #цена". Конечная цель получить три переменных, равных первым трём хештегам:
$osn1 = '#евро@firma_net'
$osn2 = '#операторы@firma_net'
$osn3 = '#связь'

Код:

PHP:
    $string = $psti;

    $after = '|#';
    $before = ' #';
    $osn1 = between ($after, $before, $string);

    $after2 = '@firma_net';
    $before2 = ' #';
    $osn2 = between ($after2, $before2, $string);

    $asi = after ($after2, $string);
    $osn3 = between ($after2, $before2, $asi);

function after ($after, $string){
    if (!is_bool(strpos($string, $after)))
    return substr($string, strpos($string,$after)+strlen($after));
}

function before ($before, $string){
    return substr($string, 0, strpos($string, $before));
}

function between ($after, $before, $string){
    return before ($before, after($after, $string));
}
    echo $osn1."\n";
    echo $osn2."\n";
    echo $osn3."\n";
Если вызывать функции через Class с именем Tema, строка для вызова функции такая:

PHP:
$osn1 = Tema::between ($after, $before, $string);
Код для Class Tema:

PHP:
<?php

class Tema

{
    public static function after ($after, $string){
        if (!is_bool(strpos($string, $after)))
        return substr($string, strpos($string,$after)+strlen($after));
//и т.д...,
но результат абсолютно аналогичный: "Fatal error: Call to undefined function between() in C:\OSPanel\domains\...04.php on line 32".
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Есть тэги для оформления кода - раз. Два, не надо мне приводить всю портянку, надо приводить код, короткий, но описывающий проблему.

Если я правильно понимаю, то у тебя путаница с пространствами имен. Что в строке 32?
 

Fox12

Новичок
Строка 32:
PHP:
$osn1 = between ($after, $before, $string);
 
Последнее редактирование:

Fox12

Новичок
between - это, по твоему, статический метод класса Tema или сторонняя функция ?
Вот! Есть же умные люди! И, именно, поэтому я - дурак здесь! Знают, подскажут! Не зря же обратился сюда. Поэтому если знаете, как надо сделать, подскажите, пожалуйста!
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну так если ты внутри класса используешь функции, то есть методы класса, то и обращаться к ним надо так же. self::between() к примеру
 

Fox12

Новичок
Пробовал и через Class (писал об этом выше), и непосредственно в теле основного большого скрипта: ошибка одна и та же. Нормально работает, только если эти три функции и переменные $string, $after, $before засовываю в отдельных короткий файл. Тогда всё работает.
 

Fox12

Новичок
Я ж показывал. В первом посту всё изложено. Хорошо, ещё раз:
PHP:
$string = $psti;

    $after = '|#';
    $before = ' #';
    $osn1 = Tema::between ($after, $before, $string);

    $after2 = '@firma_net';
    $before2 = ' #';
    $osn2 = Tema::between ($after2, $before2, $string);

    $asi = Tema::after ($after2, $string);
    $osn3 = Tema::between ($after2, $before2, $asi);

    echo $osn1."\n";
    echo $osn2."\n";
    echo $osn3."\n";
Код для Class Tema:

PHP:
<?php

class Tema

{

function after ($after, $string){
    if (!is_bool(strpos($string, $after)))
    return substr($string, strpos($string,$after)+strlen($after));
    }

function before ($before, $string){
    return substr($string, 0, strpos($string, $before));
    }

function between ($after, $before, $string){
    return before ($before, after($after, $string));
    }
}
Но что с Классом, что в теле основного скрипта ошибка одна и та же.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ты в классе напиши нормально код. self::before(), сейчас у тебя идет вызов как бы встроенной функции, а не метода класса

В общем иди читать основы.
 

Fox12

Новичок
Разница только в том, что при использовании Класса ошибка показывается в файле Класса: "Fatal error: Call to undefined function before() in C:\OSPanel\domains\... tema.php on line 22". В строке 22 возврат функции between:
PHP:
return before ($before, after($after, $string));
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я начинаю терять терпение. Иди читай основы, и пока не увидишь мой ответ и не поймешь нахрена там стоит self:: - назад ни ногой.
 

Fox12

Новичок
Я начинаю терять терпение. Иди читай основы,..
Во-первых, смотрите, кто Вам в данный момент пишет, а во-вторых, кто Вас учил незнакомым людям тыкать. И прям, такой нетерпеливый! Есть общепринятые правила общения людей. Неплохо бы Вам их тоже поучить.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Никто Вам тут основы разжевывать не будет.
 

Fox12

Новичок
Разобрался. Всем спасибо. Подтолкнули в нужном направлении. Я не программист и никогда им не буду, поэтому изучать методы классов не вижу смысла. Но иногда приходится решать и такие задачи, причём решение должно быть быстрым, чего, собственно говоря, и ждал. Извиняюсь, если кого-то задел своими высказываниями.
PHP:
<?php
class Tema
{
    public function after ($after, $string){
      if (!is_bool(strpos($string, $after)))
    return substr($string, strpos($string,$after)+strlen($after));
}
public function before ($before, $string){
      return substr($string, 0, strpos($string, $before));
}
public function between ($after, $before, $string){
      return Tema::before ($before, Tema::after($after, $string));
}
 
Сверху