He will serve as the backup to starter Andy Dalton.
Barkley, 27, was drafted by the Eagles in the fourth round of the 2013 draft. The USC product most recently played for the Chicago Bears in 2016, but he was with the San Francisco 49ers in training camp last year and was signed midseason by the Arizona Cardinals but never played.
The Bengals were in the market for a backup after losing quarterback AJ McCarron to the Bills in free agency. McCarron was Dalton's primary backup from 2015-2017 and started three regular-season games and an 18-16 loss to the Steelers in the AFC wild-card game after Dalton got hurt in 2015.
McCarron recently won a grievance against the Bengals that allowed him to become an unrestricted free agent instead of a restricted free agent after it was ruled the Bengals incorrectly placed him on the non-football injury list during his rookie season.
The Bengals now have some experience behind Dalton. Although they claimed Jeff Driskel off waivers in 2016, he has yet to take an NFL snap and is currently rehabbing after suffering a broken arm in practice at the end of the 2017 season.
Barkley has played in 11 games for the Eagles and Bears. He started six games for Chicago in 2016 due to injuries but ultimately finished 1-5 as a starter. He completed 59.7 percent of his passes last season for 1,611 yards, eight touchdowns and 14 interceptions. He also caught a touchdown pass in 2016.